Я пытаюсь использовать компонент навигации, чтобы отобразить фрагмент диалога выбора даты. Я получаю следующую ошибку:
android.view.WindowManager $ BadTokenException: невозможно добавить окно - нулевой токен недействителен; ваша деятельность работает?
Это мой класс DatePicker
class DatePickerFragment : DialogFragment(), DatePickerDialog.OnDateSetListener {
var datePickerListener: DatePickerFragmentListener? = null
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(VitrixDataCollectionApp.context, this, year, month, day)
}
interface DatePickerFragmentListener {
fun onDateSet(view: DatePicker, year: Int, month: Int, day: Int)
}
override fun onDateSet(view: DatePicker, year: Int, month: Int, day: Int) {
datePickerListener?.onDateSet(view,year, month, day)
}
}
Я хотел бы показать средство выбора даты, когда TextInputField имеет фокус. Вот мой код для перехода к DatePicker
private fun showDatePicker(hasFocus: Boolean, view: View) {
Log.i(FRAGMENT_NAME, "Has focus $hasFocus")
if (hasFocus) {
Navigation.findNavController(view).navigate(R.id.action_createPatientDetailsFragment_to_datePickerFragment)
}
}
Вот соответствующие части моего навигационного графика xml
<fragment android:id="@+id/createPatientDetailsFragment"
android:name="com.datacollection.ui.patients.create_patient.patient_details.CreatePatientDetailsFragment"
android:label="create_patient_details_fragment"
tools:layout="@layout/create_patient_details_fragment">
<action android:id="@+id/action_createPatientDetailsFragment_to_datePickerFragment"
app:destination="@id/datePickerFragment"/>
</fragment>
<dialog
android:id="@+id/datePickerFragment"
android:name="com.datacollection.ui.DatePickerFragment"/>
Я использую версию контроллера Nav: 2.1.0-alpha04
Вот мои вопросы:
- Как мне показать фрагмент диалога?
- Как мне найти идентификатор моего фрагмента DatePicker, я как-то догадался, что это R.id.datePickerFragment
Дайте мне знать, если вам нужна дополнительная информация или вам нужно больше посмотреть мой код.