当自定义对话框miss()之后调用finish()时,Android Activity 崩溃

标签 android kotlin android-activity customdialog

对于 Kotlin,我使用自定义对话框类。需要通过在对话框的 onClick() 上调用该 Activity 的 finish() 来关闭该 Activity 以返回上一个 Activity 。

简化的自定义对话框

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()
    }
}

Activity 将此对话框称为


 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)

该 Activity 正在扩展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)

我也尝试过参加 Activity 课。这也行不通。

我看过这些问答 1 , 2 ,还有其他一些问题,但未能解决。

如何解决这个问题?

最佳答案

如果您查看父类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()
    }
}

关于当自定义对话框miss()之后调用finish()时,Android Activity 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62095923/

相关文章:

android - Android Room 中的实体列表关系

java - 检查 Activity 是否是启动后的第一个 Activity

android - 如何使用 EditTextPreference 和 Togglebutton 创建一个首选项?

android - Kotlin Android 中的 OKhttp 自签名证书

java - PublicKey/PrivateKey 和 RSAPublicKey/RSAPrivateKey 有什么区别?

generics - kotlin,如何返回泛型类型成员变量

java - Android 通知在现有 Activity 上打开

Android 打算用原始资源打开视频?

android - openCV Android : knnMatcher returns only matches for 1 descriptor

android - 如何限制 GridLayout 中 ListView 的高度?