Я полный новичок, и в моем приложении есть основное действие и действие по прохождению теста. Обычно нажатие кнопки «Назад» в тестовом действии возвращает вас к основному действию. Это нормально, но я хочу добавить диалоговое окно подтверждения, спрашивающее, действительно ли они хотят сначала отказаться от теста. Пока у меня есть следующее в тестовой деятельности:
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() Activity из фрагмента диалога. Как я уже сказал, я новичок в Android, поэтому мне может понадобиться ответ ELI5.
позвоните finish()
или this.finish()
внутри вашего DialogInterface.OnClickListener
. Метод 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
}