我是一个完全的新手,我的应用程序有一个主活动和一个测试活动。通常在测试活动中按后退按钮会将您带回到主活动。这很好,但是我想添加一个确认对话框,询问他们是否真的想首先放弃测试。到目前为止,我在测试活动中有以下内容:
override fun onBackPressed() {
var exit = ExitTestDialogFragment()
exit.show(supportFragmentManager,"exit")
}
class ExitTestDialogFragment : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let {
val builder = AlertDialog.Builder(it)
builder.setTitle("Leave Test?")
builder.setMessage("Your score will be lost.")
.setPositiveButton("OK",
DialogInterface.OnClickListener { dialog, id ->
// This is where I'd like to return to Main Activity
})
.setNegativeButton("Cancel",
DialogInterface.OnClickListener { dialog, id ->
dialog.dismiss()// User cancelled the dialog
})
// Create the AlertDialog object and return it
builder.setCancelable(false)
builder.create()
} ?: throw IllegalStateException("Activity cannot be null")
}
}
我似乎无法弄清楚如何做什么通常是活动的super.onBackPressed()从对话框片段。就像我说的,我是android的新手,所以可能需要一点ELI5的答案。
在DialogInterface.OnClickListener
内调用finish()
或this.finish()
。方法finish()
将破坏调用它的当前活动,在这种情况下是test-taking activity
你应该从你的对话框中调用mainActivity。
.setPositiveButton("OK",
DialogInterface.OnClickListener { dialog, id ->
// here you can get your current activity
//then dismiss your dialog and finish current activity
//call context.finish or activity.finish here. It will
//finish this activity
//and will take you to the previous activity (in your case
//to mainActivity)
})如果你需要任何进一步的帮助,请在评论中提出来
添加到容器对话框
dialog?.setOnKeyListener { dialog, keyCode, event ->
if (keyCode == KeyEvent.KEYCODE_BACK && event.action == KeyEvent.ACTION_UP) {
handleBack() // your code
return@setOnKeyListener true
} else
return@setOnKeyListener false
}