Сбой приложения Kotlin при обновлении списка при нажатии

Я сделал приложение для Android, в котором используется настраиваемый список с адаптером, кнопкой обновления и событием onlick для каждой строки. Моя проблема в том, что при первой загрузке списка все работает хорошо, но когда я нажимаю «Обновить», я нажимаю на случайную строку, и приложение вылетает со следующей ошибкой:

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?

В событии onlick у меня есть собственный диалог с 4 кнопками, ошибка в последней строке (builder.create().show()).

rowView.setOnClickListener {
    val builder = AlertDialog.Builder(context)
    builder.setTitle(context.getString(R.string.alert_commands_desc) + " " + recipe.valve)
    builder.setItems(
        arrayOf<CharSequence>(context.getString(R.string.open_valve_button),
            context.getString(R.string.close_valve_button),
            context.getString(R.string.deny_command_button),
            context.getString(R.string.close))
    ) { dialog, which ->
        when (which) {
            0 -> sendValveCommand("AV", recipe.id, context)
            1 -> sendValveCommand("CV", recipe.id, context)
            2 -> sendValveCommand("AC", recipe.id, context)
            3 -> dialog.dismiss()
        }
    }
    builder.create().show()
}

Это часть адаптера:

if (json.has("Apparati_Controllo")) {
    val controlElementList = json.getJSONArray("Apparati_Controllo")
    val recipeList = ControlElement.populateRecipe(controlElementList)
    val adapter = ControlElementAdapter(thisContext, recipeList)
    listView.adapter = adapter
}

Я пытался очистить адаптер, список, изменить контекст, ничего не работает... Большое спасибо, скажите мне, если вам нужно больше кода.

0
0
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я никогда не предпочитаю использовать this или getApllicationContext() для любого представления, которое нужно показать. Вместо этого используйте это:

this@MyActivityName //in kotlin
MyActivityName.this //in java

Также добавьте это в свой AndroidManifest.xml

<uses-permission android:name = "android.permission.SYSTEM_ALERT_WINDOW"/>

Другие вопросы по теме