Несколько вопросов о DatePickerDialog с использованием DialogFragment - PullRequest
1 голос
/ 04 мая 2020

Мне нужно установить datePickerDialog и отключить все будущие даты и все даты до одного месяца go, например: если сегодня 04/05/2020, мне нужен диапазон от 04/04/2020 - 04/05 / 2020.

Как я могу установить его? Я попробовал подход min / max, но проблема в том, что я использую другой фрагмент, который расширил DialogFragment.

Это мой код:

class DatePickerFragmentDialog : 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)
        // Create a new instance of DatePickerDialog and return it
        return DatePickerDialog(requireActivity(), this, year, month, day)
    }
   override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {

    }
 }

И я вызываю его из основного фрагмента. здесь:

DatePickerFragmentDialog().show(parentFragmentManager, "datePicker" )

Также - поскольку getSupportFragment устарел, я звоню сюда parentFragmentManager, это правильный выбор?

И последний вопрос - Я могу получить пользовательский выбор из onDateSet функции, но проблема в том, что эта функция находится в DatePickerFragmentDialog, как я могу передать переменные из этой функции в мой основной фрагмент и представления?

1 Ответ

2 голосов
/ 04 мая 2020

Для вашего первого вопроса вы можете установить минимальную дату и максимальную дату внутри onCreateDialog:

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)
    val d = DatePickerDialog(requireActivity(), this , year, month, day)
    val dp = d.datePicker

    dp.maxDate = //Do your calculation
    dp.min= //Do your calculation

    return d
}

И для вашего другого вопроса - вы можете реализовать DatePickerDialog.OnDateSetListener внутри основного фрагмента и вызвать onDateSet оттуда

...