Android 日期选取器对话框上下文参数
Android Date Picker dialog context parameter
我正在玩 android,我想在我的应用程序中创建一个日期选择器。我遵循了 developer.android.com 上的教程,其中显示了以下代码:
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)
// Create a new instance of DatePickerDialog and return it
return DatePickerDialog(activity, this, year, month, day)
}
override fun onDateSet(view: DatePicker, year: Int, month: Int, day: Int) {
// Do something with the date chosen by the user
}
}
但是,当我使用此代码时 android studio 抱怨 DatePickerDialog
的第一个参数类型不匹配:
Type mismatch.
Required: Contex
Found: FragmentActivity?
我也尝试获取上下文 activity?.applicationContext
但这也没有解决问题。
是因为FragmentActivity?
是可空的?
所以你需要一个不可空的Context
。您可以使用:
requireContext()
函数 requireContext()
是在 Kotlin 中以片段的形式获取不可空上下文的推荐方法。这并不意味着不可为空,Context
始终可以为空。该函数的作用是在为 null 时抛出异常,这就是为什么您可以像不为 null 一样使用它。大多数情况下不会抛出异常,如果它发生是因为它是在 Context
可用之前或之后使用的,所以使用 context!!
也会崩溃。
使用 activity!!.applicationContext
也可以,但这是从可空值转换为不可空值,因此不推荐使用。
这与 requireActivity()
非常相似
您可以尝试的最后一件事是使用 this
,这将是 Fragment
,遗憾的是您不能
val context: Context = this
那将不为空,因为片段在做某事时不为空,但片段不像活动那样从 Context
扩展(如果您遵循活动上下文的继承另外 3 个上级父项是 ContextThemeWrapper
、ContextWrapper
和 Context
)
我正在玩 android,我想在我的应用程序中创建一个日期选择器。我遵循了 developer.android.com 上的教程,其中显示了以下代码:
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)
// Create a new instance of DatePickerDialog and return it
return DatePickerDialog(activity, this, year, month, day)
}
override fun onDateSet(view: DatePicker, year: Int, month: Int, day: Int) {
// Do something with the date chosen by the user
}
}
但是,当我使用此代码时 android studio 抱怨 DatePickerDialog
的第一个参数类型不匹配:
Type mismatch.
Required: Contex
Found: FragmentActivity?
我也尝试获取上下文 activity?.applicationContext
但这也没有解决问题。
是因为FragmentActivity?
是可空的?
所以你需要一个不可空的Context
。您可以使用:
requireContext()
函数 requireContext()
是在 Kotlin 中以片段的形式获取不可空上下文的推荐方法。这并不意味着不可为空,Context
始终可以为空。该函数的作用是在为 null 时抛出异常,这就是为什么您可以像不为 null 一样使用它。大多数情况下不会抛出异常,如果它发生是因为它是在 Context
可用之前或之后使用的,所以使用 context!!
也会崩溃。
使用 activity!!.applicationContext
也可以,但这是从可空值转换为不可空值,因此不推荐使用。
这与 requireActivity()
您可以尝试的最后一件事是使用 this
,这将是 Fragment
,遗憾的是您不能
val context: Context = this
那将不为空,因为片段在做某事时不为空,但片段不像活动那样从 Context
扩展(如果您遵循活动上下文的继承另外 3 个上级父项是 ContextThemeWrapper
、ContextWrapper
和 Context
)