Я пытаюсь вернуть дату, выбранную из моего DatePickerDialog.Я знаю, что здесь, в SO, есть несколько вопросов по этому поводу, и я уверен, что я проверил их в своем коде, и я до сих пор не могу получить дату обратно в свой фрагмент, который вызывает DatePickerDialog.
Я использую конфонент Навигация для отображения диалогового окна. Может ли это быть причиной проблемы?
Вот мой DatePickerDialog:
class DatePickerFragment : DialogFragment(), DatePickerDialog.OnDateSetListener {
private var onDateSetListener: DatePickerDialog.OnDateSetListener? = null
fun setListeningActivity(listener: DatePickerDialog.OnDateSetListener) {
onDateSetListener = listener
}
override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
onDateSetListener?.onDateSet(view,year, month, dayOfMonth)
}
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)
// Create a new instance of DatePickerDialog and return it
return DatePickerDialog(context, this, year, month, day)
}
}
Соответствующий код из фрагмента, вызывающего Datepicker:
private fun showDatePicker(hasFocus: Boolean, view: View) {
Log.i(FRAGMENT_NAME, "Has focus $hasFocus")
val fragment = DatePickerFragment()
fragment.setListeningActivity(this)
if (hasFocus) {
Navigation.findNavController(view).navigate(R.id.datePickerFragment)
}
}
override fun onDateSet(view: DatePicker, year: Int, month: Int, day: Int) {
Log.i(FRAGMENT_NAME, "Date received: $year-$month-$day")
fragmentView.dateOfBirthField.editText?.setText("$year-$month-$day")
}
Вот как я вызываю метод showDatePicker:
gmentView.dateOfBirthField.editText? .SetOnFocusChangeListener {_, hasFocus -> showDatePicker (hasFocus, фрагментView)}
Вопрос: Как получить дату обратно во фрагмент, которыйвызывает DatePickerDialog.Я не хочу иметь DatePickerDialog в качестве внутреннего класса для класса, который его вызывает.