Как я могу обработать кнопку «Назад», нажатую фрагментом диалога?

Я полный новичок, и в моем приложении есть основное действие и действие по прохождению теста. Обычно нажатие кнопки «Назад» в тестовом действии возвращает вас к основному действию. Это нормально, но я хочу добавить диалоговое окно подтверждения, спрашивающее, действительно ли они хотят сначала отказаться от теста. Пока у меня есть следующее в тестовой деятельности:

    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.

1
0
61
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

позвоните 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
    }

Другие вопросы по теме