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