1

我的Android应用程序实际上有点问题。带导航抽屉的片段导航

我的应用程序包含一个导航抽屉,用于在应用程序内导航。 对于实施例

导航抽屉:

  1. 概述
  2. 搜索
  3. 用户
  4. 东西

当应用启动时,我将加载概述片段。 如果用户点击的其他物品,我将与改变的片段:

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

问题是现在,当用户切换,例如,从1> 2> 4> 3并且将它们推压背面关键,它会给他带来只有一个片段。 3> 4> 2> 1

所以我添加了代码,这会将他带回到每个Backpress上的片段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; 
} 

好吧,首先这是罚款,但现在我更增添了几分片段在更深的层次,但他们should't回去片段1背面按。

对于实施例

  1. 概述(主碎片)
  2. 搜索(后退键返回到片段1)
  3. 用户(返回键返回到片段1)
  4. 东西(返回键返回到片段1)

4.1详细信息(返回键返回到片段4.东西)< 4.1.1更多详细信息(B ack Key回到片段4.1)

如果有人有一个想法我会如何处理我的应用程序中的导航会很好。

Greetz

+0

是否有特定的原因使后退按钮的行为像这样?通常用户会希望后退按钮将它们带到前一个屏幕,而不是主屏幕。 – juunas

+0

'交易。替换“将删除您当前的片段并添加新的片段。在进入更深层次的片段时,应该使用'transaction.add',以便将其添加到堆栈中。 – CodeMonkey

+0

是的,应用程序的主要活动是概述,如果您从概览转到设置,然后转到搜索,则不想返回到设置,如果按回 – AllesFAM

回答

0

您的代码是正确的,需要更改逻辑。 每次从navigationdrawer使用此代码

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

和第二去,首先清除所有片段在堆栈中,添加相应的所选择(1或2或3)片段到堆栈。当你深入到2 - > 2.1 - > 2.2,在后面你会返回2.2 - > 2.1 - > 2。 没有必要重写onKeyDown()方法并再次添加碎片

+0

该想法很好,但是当我清除BackStack在导航到其他片段之前,我不能回到Overview Fragment,如果按下Backkey – AllesFAM

+0

ok ...然后覆盖onBackPressed()方法并检查backstack入口数,如果它是0,则调用您的OverviewFragment –