DatePickerFragment.kt を作成し、MainActivity.kt で使用します。
日付を選択したらテキストビューに選択した日付を表示しています。
package com.example.sampledatetimepickerdialog
import android.app.DatePickerDialog
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.widget.DatePicker
import androidx.fragment.app.DialogFragment
import java.util.*
class DatePickerFragment: DialogFragment(), DatePickerDialog.OnDateSetListener { // *1
interface Listener {
fun onDataSet(year: Int, month: Int, day: Int)
}
private lateinit var listener: Listener
override fun onAttach(context: Context) { // *2
super.onAttach(context)
when {
parentFragment is Listener -> listener = parentFragment as Listener
context is Listener -> listener = context
}
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val c = Calendar.getInstance()
val year = c.get(Calendar.YEAR)
val month = c.get(Calendar.MONTH)
val day = c.get(Calendar.DAY_OF_MONTH)
return DatePickerDialog(requireActivity(), this, year, month, day) // *3
}
override fun onDateSet(p0: DatePicker?, year: Int, month: Int, day: Int) { // *4
listener.onDataSet(year, month, day)
}
}
package com.example.sampledatetimepickerdialog
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.sampledatetimepickerdialog.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity(), DatePickerFragment.Listener { // *1
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.btnDatePicker.setOnClickListener { // *2
val datePicker = DatePickerFragment()
datePicker.show(supportFragmentManager, "Date picker dialog")
}
}
override fun onDataSet(year: Int, month: Int, day: Int) { // *3
val m = (month + 1).toString().padStart(2, '0')
val d = day.toString().padStart(2, '0')
val str = "$year-$m-$d"
binding.txvSample.text = str
}
}