hegaojian / JetpackMvvm

:chicken::basketball:一个Jetpack结合MVVM的快速开发框架,基于MVVM模式集成谷歌官方推荐的JetPack组件库:LiveData、ViewModel、Lifecycle、Navigation组件 使用Kotlin语言,添加大量拓展函数,简化代码 加入Retrofit网络请求,协程,帮你简化各种操作,让你快速开发项目
https://github.com/hegaojian/JetpackMvvm
Apache License 2.0
3.16k stars 616 forks source link

提个bug,拦截返回事假会使 其他的fragment无法通过onBackPressedDispatcher拦截返回事件 #25

Closed ppg408331701 closed 4 years ago

ppg408331701 commented 4 years ago
    override fun onBackPressed() {
        val nav = Navigation.findNavController(this, R.id.nav_host_fragment)
        if (nav.currentDestination != null && nav.currentDestination!!.id != R.id.mainFragment) {
            //如果当前界面不是主页,那么直接调用返回即可
            nav.navigateUp()
        } else {
            //是主页
            if (System.currentTimeMillis() - exitTime > 2000) {
                ToastUtils.showShort("再按一次退出程序")
                exitTime = System.currentTimeMillis()
            } else {
                super.onBackPressed()
            }
        }
    }

这样子重写MainActivity的onBackPressed()方式拦截返回事假会使 其他的fragment无法通过onBackPressedDispatcher拦截返回事件。 参考:https://developer.android.google.cn/guide/navigation/navigation-custom-back#kotlin 参考:https://www.jianshu.com/p/aec2cde0a5f0

我目前是在MainFragment添加onBackPressedDispatcher拦截返回键,处理返回2次退出app事件 在SubFragment添加onBackPressedDispatcher,拦截返回键,处理之前提到的Navigation 的出栈事件

hegaojian commented 4 years ago

你这种写法是正确的 , 感谢你的提醒和解决方案