Android - AlertDialog внутри адаптера - PullRequest
1 голос
/ 23 марта 2020

Я работаю над android нативным приложением, и у меня есть некоторые проблемы с altert dialog внутри моего adapter. Основной activity содержит fragment, который, в свою очередь, содержит recyclerView, с которым связан adapter. recyclerView содержит несколько элементов, и в каждом из них есть кнопка, которая позволяет вызвать диалоговое окно с предупреждением. Когда выполняется процесс вставки контента и после него появляется ошибка «Невозможно добавить окно - токен недействителен; ваша деятельность выполняется?» Появляется. и диалоговое окно предупреждения (код) не появляется.

Код моего адаптера:

 override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    holder.state.setOnClickListener {
        if (result_info_feridas!!.result!![position].isClosed == true.toString()) {
            alertDialogConfirmProcess("abrir", position, holder.state, context)
        } else {
            alertDialogConfirmProcess("fechar", position, holder.state, context)
        }
    }

}

Диалоговое окно моего предупреждения:

private fun alertDialogConfirmProcess(state: String?, position: Int, stateButton: Button, context: Context) {
    var response: Boolean?
    val alertDialog =  AlertDialog.Builder(view.rootView.context)

    if (state == "fechar") {
        alertDialog.setMessage(view.rootView.context.resources.getString(R.string.confirm_close_wound))
    } else {
        alertDialog.setMessage(view.rootView.context.resources.getString(R.string.confirm_open_wound))
    }

    alertDialog.setPositiveButton(view.rootView.context.resources.getString(R.string.sim)) { dialog, which ->
        stateButton.isClickable = false

        response = if (state == "fechar") {
            closeWound(result_info_feridas!!.result!![position].intervention!![0].woundId, ObjectToken.accessToken).closeWoundRequest()
        } else {
            openWound(result_info_feridas!!.result!![position].intervention!![0].woundId, ObjectToken.accessToken).openWoundRequest()
        }

        if (response == true) {
            if (state == "fechar") {
                alertDialogResponseState(view.rootView.context.resources.getString(R.string.photo_closed_success))
            } else {
                alertDialogResponseState(view.rootView.context.resources.getString(R.string.photo_opened_success))
            }

            if (seeClosedWounds == true) {
                updateResultWoundsInfo(result_info_feridas!!.result!![position].patientId!!, "All")
            } else {
                updateResultWoundsInfo(result_info_feridas!!.result!![position].patientId!!, "Opened")
            }
        } else {
            stateButton.isClickable = true
            alertDialogResponseState(view.rootView.context.resources.getString(R.string.erro))
        }

        dialog!!.dismiss()

    }

    alertDialog.setNegativeButton(view.rootView.context.resources.getString(R.string.nao)) { dialog, which ->
        dialog!!.dismiss()
    }
    stateButton.isClickable = true
 /*   val dialog = alertDialog.create();*/
    alertDialog.show()
}

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Я смоделировал части вашего кода, который создает диалог, и он действительно появился, что заставило меня подумать, что вы передаете AlertDialog.Builder Constructor какой-то недопустимый контекст, что очень странно. не могли бы вы показать мне весь код и что вы устанавливаете в качестве глобальной переменной представления?

0 голосов
/ 23 марта 2020
val alertDialog =  AlertDialog.Builder(context)
...