gpt4 book ai didi

在自定义对话框dismiss() 之后调用finish() 时,Android Activity 会崩溃

转载 作者:行者123 更新时间:2023-12-04 09:46:14 25 4
gpt4 key购买 nike

对于 Kotlin,我使用的是自定义对话框类。该 Activity 需要关闭以通过调用 finish() 返回上一个 Activity 在 onClick() 上的 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 课上。这也不起作用。

我看过这些 Q/As 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()
}
}

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com