android.view.WindowManager $ BadTokenException: невозможно добавить окно - нулевой токен недействителен; ваша активность активна?

Я попытался открыть DatePicker из этого и он работает нормально, пока я не вставлю его во фрагмент. Ошибка на DatePickerDialog(...).show() и я думаю, что это не работает из-за контекста фрагмента.

Вот код (во фрагменте)

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    val view: View = inflater!!.inflate(R.layout.fragment_fill1, container, false)

    textview_date = view.text_view_date
    button_date = view.button_date
    textview_date!!.text = "--/--/----"

    // create an OnDateSetListener
    val dateSetListener = object : DatePickerDialog.OnDateSetListener {
        override fun onDateSet(
            view: DatePicker, year: Int, monthOfYear: Int,
            dayOfMonth: Int
        ) {
            cal.set(Calendar.YEAR, year)
            cal.set(Calendar.MONTH, monthOfYear)
            cal.set(Calendar.DAY_OF_MONTH, dayOfMonth)
            updateDateInView()
        }
    }

    button_date!!.setOnClickListener(object : View.OnClickListener {
        override fun onClick(view: View) {
            DatePickerDialog(
                getActivity()!!.getApplicationContext(), //Context to fill
                dateSetListener,
                // set DatePickerDialog to point to today's date when it loads up
                cal.get(Calendar.YEAR),
                cal.get(Calendar.MONTH),
                cal.get(Calendar.DAY_OF_MONTH)
            ).show() //Error on this line
        }

    })

    // Return the fragment view/layout
    return view
}

//Date Picker
private fun updateDateInView() {
    val myFormat = "dd/MM/yyyy" // mention the format you need
    val sdf = SimpleDateFormat(myFormat, Locale.US)
    textview_date!!.text = sdf.format(cal.getTime())
}

Благодарность!!

1
Tivaroveton 15 Апр 2020 в 22:35

1 ответ

Лучший ответ

Диалогам нужен контекст активности.

Заменить

getActivity()!!.getApplicationContext()

С участием

requireActivity()
1
laalto 15 Апр 2020 в 20:16