DatePickerDialog使用DialogFragment的几个问题
Several questions about DatePickerDialog using DialogFragment
我需要设置一个datePickerDialog
,并禁用所有未来日期和一个月前的所有日期,
例如:如果今天是 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
我怎么能将变量从此函数传递到我的主要片段和视图?
对于第一个问题,您可以在 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
我需要设置一个datePickerDialog
,并禁用所有未来日期和一个月前的所有日期,
例如:如果今天是 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
我怎么能将变量从此函数传递到我的主要片段和视图?
对于第一个问题,您可以在 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