关闭不是来自MainActivity的应用程序无法正常工作

时间:2019-05-12 14:07:20

标签: android kotlin

我有一个使用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。

1 个答案:

答案 0 :(得分:1)

MainActivity退出应用程序时,HomeActivity可能从未被销毁。如果是这种情况,那么当您重新访问先前创建的MainActivity时,不会调用启动onCreate()的{​​{1}}。

可以通过在AndroidManifest.xml中的HomeActivity上设置android:noHistory="true"来解决。或者,通过在启动MainActivity之后调用finish()

HomeActivity