带导航抽屉的片段导航

时间:2014-12-29 03:39:52

标签: android android-fragments navigation navigation-drawer fragment-backstack

我的Android应用实际上有点问题。

我的应用程序包含导航抽屉,用于在应用程序内导航。 例如

导航抽屉:

  1. 概述
  2. 搜索
  3. 用户
  4. 东西
  5. 当App启动时,我将加载Overview片段。 如果用户单击其他项目,我将使用以下内容更改片段:

    final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.frame_container, fragment, TAG);
    transaction.addToBackStack(null);
    transaction.commit();
    

    现在问题是,当用户切换时,例如,从1> 1开始。 2> 4> 3,他们按下后退键,它会给他带回一个片段。 3> 4> 2> 1

    所以我添加了代码,这将使他回到每个Backpress上的Fragment 1。

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        int exit = 0;
    
    
        if (keyCode == KeyEvent.KEYCODE_BACK) {
    
    
            getFragmentManager().popBackStack();
            FragmentManager fm = getSupportFragmentManager();
            Fragment fragment = new Overview();
            fm.beginTransaction().add(R.id.frame_container, fragment).addToBackStack("fragBack").commit();
            return false;
        }
        return false;
    }
    

    好的,首先它很好,但是现在我在更深层次上添加了更多的碎片,但是他们不应该在背压下回到碎片1。

    例如

    1. 概述(主要片段)
    2. 搜索(返回键返回片段1)
    3. 用户(返回键返回片段1)
    4. 东西(后退键返回片段1)
    5. 4.1详细信息(返回键返回片段4.填充)< 4.1.1更多细节(返回键返回到片段4.1)

      如果有人知道如何在我的应用程序中处理导航,那会很好。

      格尔茨

1 个答案:

答案 0 :(得分:0)

您的代码是正确的,需要更改逻辑。 无论何时从导航器中取出,首先使用此代码清除堆栈中的所有片段

private void clearBackStack() {
    FragmentManager manager = getSupportFragmentManager();
    manager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
} 

,其次,将相应的选定(1或2或3)片段添加到堆栈中。

private void navigateToFragment(Fragment fragment, String TAG){
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.frame_container, fragment, TAG);
    transaction.addToBackStack(null);
    transaction.commit();
}

当你像2更深入时 - > 2.1 - > 2.2,在背压上你将返回2.2 - > 2.1 - > 2。 无需重写onKeyDown()方法并再次添加片段