Kotlin Всплывающее окно DatePicker не работает внутри фрагмента: WindowManager $ BadTokenException: невозможно добавить окно - нулевой токен недействителен; - PullRequest
1 голос
/ 15 апреля 2020

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

Я пытался вызвать DatePicker из this , и он работает нормально, пока я не вставлю его в фрагмент. На 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 Ответ

1 голос
/ 15 апреля 2020

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

Заменить

getActivity()!!.getApplicationContext()

на

requireActivity()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...