【问题标题】:Android navigation architecture component - system's back button exits the appAndroid导航架构组件-系统的后退按钮退出应用
【发布时间】:2018-11-26 14:49:07
【问题描述】:

我正在使用 android 的导航架构组件进行演示。我有一个activity 和两个fragments。

在活动的xml中,我添加了以下代码-

<fragment
    android:id="@+id/main_container"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="@dimen/match_constraints"
    android:layout_height="@dimen/match_constraints"
    app:defaultNavHost="true"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:navGraph="@navigation/nav_graph" />

然后我将第一个片段设置为起始目的地。在第一个片段中,单击按钮后,我完成了以下操作 -

NavHostFragment.findNavController(this).navigate(R.id.action_firstFragment_to_secondFragment)

而且效果很好。现在当我按下系统的后退按钮时,理想情况下我应该回到第一个片段,但应用程序退出。我做错了什么?

【问题讨论】:

标签: android navigation


【解决方案1】:

我想,这发生在您的代码中只是因为您可能在 BaseActivity 的某处处理 onBackPressed() 功能。请仔细看。

希望对你有帮助。

【讨论】:

    【解决方案2】:
        /** orrerride activity onBackPressed() **/
    
    private boolean doubleBackToExitPressedOnce = false;
        @RequiresApi(api = Build.VERSION_CODES.M)
        @Override
        public void onBackPressed() {
            int start = Navigation.findNavController(this, R.id.nav_host_fragment).getCurrentDestination().getId();
            if (start == R.id.nav_home) {
                if (doubleBackToExitPressedOnce) {
                    super.onBackPressed();
                    return;
                }
                this.doubleBackToExitPressedOnce = true;
                Toast.makeText(MainActivity.this, "Press back again to exits", Toast.LENGTH_SHORT).show();
    
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        doubleBackToExitPressedOnce = false;
                    }
                }, 2000);
            } else {
                super.onBackPressed();
            }
        }
    

    【讨论】:

    • 问题不在于实现再次按下退出功能。它询问为什么单击非顶级片段中的后退按钮会退出应用程序以及如何解决该问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    相关资源
    最近更新 更多