Android действие прекращается, когда fini sh () вызывается после настраиваемого диалогового окна dismiss () - PullRequest
0 голосов
/ 30 мая 2020

С Kotlin я использую настраиваемый класс диалогового окна. Действие необходимо закрыть, чтобы вернуть предыдущее действие с вызовом finish() действия в onClick() диалогового окна.

Упрощенный настраиваемый диалог

class TestDialog (context: Context) : Dialog(context),
    View.OnClickListener {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        requestWindowFeature(Window.FEATURE_NO_TITLE)

        setContentView(R.layout.dialog_result_screen)


        var yesButton=  findViewById(R.id.buttonControl);

        yesButton.setOnClickListener(this);
    }

    override fun onClick(v: View) {
        dismiss()
        (context as AppCompatActivity).finish()
    }
}

Действие вызывает это диалоговое окно как


 val testDialog = TestDialog(this@TheDialogDisplayerActivity)
 testDialog.show()
 //used to dislay in full size of the secreen.
 val window: Window? = testDialog.window
 window?.setLayout(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT)

Действие расширяет AppCompatActivity

Когда Вызывается finish(), возникает следующая ошибка: я не могу найти решение.

java.lang.ClassCastException: android.view.ContextThemeWrapper cannot be cast to androidx.appcompat.app.AppCompatActivity
        at com.xyz.widget.TestResultDialog.onClick(TestResultDialog.kt:67)

Я тоже пробовал преобразовать в класс активности. Это тоже не сработало.

Я просмотрел эти Q / As 1 , 2 и некоторые другие вопросы, но не смог решить .

Как решить эту проблему?

1 Ответ

2 голосов
/ 30 мая 2020

, если вы посмотрите в родительский класс Dialog, тогда context станет: mContext = new ContextThemeWrapper(context, themeResId); - это именно та ошибка, которую он выдает, когда вы пытаетесь вернуть его обратно в Activity позже.

Вам следует сделать:

class TestDialog (private val activity: Activity) : Dialog(activity),
    View.OnClickListener {

  ...

  override fun onClick(v: View) {
        dismiss()
        activity.finish()
    }
}
...