我有一个使用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)
}
}
在“家庭活动”中:
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。
答案 0 :(得分:1)
从MainActivity
退出应用程序时,HomeActivity
可能从未被销毁。如果是这种情况,那么当您重新访问先前创建的MainActivity
时,不会调用启动onCreate()
的{{1}}。
可以通过在AndroidManifest.xml中的HomeActivity
上设置android:noHistory="true"
来解决。或者,通过在启动MainActivity
之后调用finish()
:
HomeActivity