片段导航

时间:2016-12-08 08:43:19

标签: android android-fragments fragmenttransaction fragment-backstack

我需要在Gmail应用中创建片段导航。它是这样的:我们有一个主要的片段A,我们可以从导航抽屉打开另一个片段(B,C,D ......),当我们打开新片段时,它在主片段顶部打开,当按下后退按钮时,在所有情况下我们都回到主要片段A,不依赖于计算新打开的片段。看起来,第一个主要片段A我们使用add方法(int FragmentTransaction)而不添加片段backStack。然后,下一个片段B我们也使用方法add,并添加到后台堆栈。当我需要打开另一个(片段C)时,我需要替换第二个片段B.但是,当我使用方法replace()时,替换所有容器,并且当从片段C或B按下后退按钮时主片段A不显示和应用程序关闭。所以,问题是:如何只替换片段B或C,而不丢失片段A?

2 个答案:

答案 0 :(得分:1)

打开片段像这样

HighlightFragment highlightFragment=new HighlightFragment(FirstReaderScreen.this); //Your fragment
    getSupportFragmentManager()
    .beginTransaction()
    .add(R.id.LL_Fragment, highlightFragment) // LL_fragment is container
    .addToBackStack(null)
    .commit();

和活动OnBackPress

@Override
public void onBackPressed() {
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
        getSupportFragmentManager().popBackStack();
    } else {
        super.onBackPressed();
    } 
}

答案 1 :(得分:1)

有效的解决方案是在您的活动中拥有两个容器框架布局。第一个(将在另一个之下)包含您的片段A.您打开的所有内容都将在第二个容器中添加/替换。

另一个解决方案是在您的布局中静态包含片段A,并在其上方放置容器framelayout,您可以在其中添加片段B,C,D等。

相关问题