Закрытие приложения не из MainActivity не работает должным образом

У меня есть приложение с SplashscreenActivity, запускающим приложение. Таким образом, SplashscreenActivity является MainActivity и запускает HomeActivity. Когда я нажимаю назад в HomeActivity, я хочу открыть диалоговое окно с вопросом, хотите ли вы выйти из приложения. Если вы нажмете да, приложение должно быть закрыто. Я понял это с помощью следующего кода:

Основная деятельность:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Handler().postDelayed({
            val intent = Intent(this, HomeActivity::class.java)
            startActivity(intent)
        }, 1500)
    }
}

В домашней активности:

override fun onBackPressed() {
    val dialog = BackPressedFragment()
    dialog.show(supportFragmentManager, "BackPressedDialog")
}

override fun leave() {
    moveTaskToBack(true)
    finish()
}

Диалог:

class BackPressedFragment: DialogFragment() {

    private lateinit var listener: ILeave

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val builder = AlertDialog.Builder(context)
        builder.setMessage(getString(R.string.leave))
            .setNegativeButton(android.R.string.cancel) {_,_->

            }
            .setPositiveButton(android.R.string.yes) {_,_->
                listener.leave()
            }
        return builder.create()
    }

    interface ILeave {
        fun leave()
    }

    override fun onAttach(context: Context) {
        super.onAttach(context)

        try {
            listener = context as ILeave
        } catch (e: ClassCastException) {
            e.printStackTrace()
        }
    }
}

Это работает, но есть одна проблема. Когда я повторно захожу в приложение, MainActivity не запускает HomeActivity. Застряв в MainActivity, я должен снова уйти и арендовать, затем запускается HomeActivity.

moveTaskToBack(true) для чего это нужно?
EpicPandaForce 12.05.2019 16:16

Я нашел это здесь, в stackoverflow. Без этой строки закрывается только активность, а не приложение.

Apri 12.05.2019 16:42
0
2
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Возможно, MainActivity никогда не уничтожался при выходе из приложения из HomeActivity. Если это так, то при повторном посещении ранее созданного MainActivity его onCreate(), который запускает HomeActivity, не вызывается.

Это можно решить, установив android:noHistory = "true" на MainActivity в AndroidManifest.xml. Или, позвонив finish() после запуска HomeActivity:

    val intent = Intent(this, HomeActivity::class.java)
    startActivity(intent)
    finish()

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