AndroidのDatePickerで日付を得る

DatePickerを使うとカレンダーを表示して日付の選択画面を出すことができます。

DatePicker実装画面

まずは表示するときに現在の日付を選択するようにしたダイアログのクラスを作成します。

class DatePickerFragment : DialogFragment(), DatePickerDialog.OnDateSetListener {

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        // Use the current date as the default date in the picker
        val c = Calendar.getInstance()
        val year = c.get(Calendar.YEAR)
        val month = c.get(Calendar.MONTH)
        val day = c.get(Calendar.DAY_OF_MONTH)

        // 第二引数に注意!!!!!!!!!!!!!!Activityを指定しています。
        return DatePickerDialog(requireContext(), activity as MainActivity, year, month, day)
    }

    override fun onDateSet(view: DatePicker, year: Int, month: Int, day: Int) {
        // Do something with the date chosen by the user
    }
}

onDateSetはユーザが選択したときに呼ばれる関数ですが空欄にします。

この中でデータを取得してもActivityで活用できないからです。

Activityで活用するには、Activityでも同様に:の後にDatePickerDialog.OnDateSetListenerを継承します。

class MainActivity : AppCompatActivity() ,DatePickerDialog.OnDateSetListener{
    var mYear = 0
    var mMonth = 0
    var mDateOfMonth = 0
      :
    override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
        mYear = year
        mMonth = month
        mDateOfMonth = dayOfMonth
        binding.tvDate.text = "${mYear}年${mMonth + 1}月${mDateOfMonth}日"
    }

時間を指定するのはTimePickerですが、全く同じ実装でできます。

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog