Закрытие приложения не из MainActivity не работает должным образом - PullRequest
0 голосов
/ 12 мая 2019

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

MainActivity:

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)
    }
}

В HomeActivity:

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.

1 Ответ

1 голос
/ 12 мая 2019

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

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

    val intent = Intent(this, HomeActivity::class.java)
    startActivity(intent)
    finish()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...