У меня есть приложение с 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.
Я нашел это здесь, в stackoverflow. Без этой строки закрывается только активность, а не приложение.
Возможно, MainActivity никогда не уничтожался при выходе из приложения из HomeActivity. Если это так, то при повторном посещении ранее созданного MainActivity его onCreate(), который запускает HomeActivity, не вызывается.
Это можно решить, установив android:noHistory = "true" на MainActivity в AndroidManifest.xml. Или, позвонив finish() после запуска HomeActivity:
val intent = Intent(this, HomeActivity::class.java)
startActivity(intent)
finish()
moveTaskToBack(true)для чего это нужно?