我有一个活动和3个片段 A,B,C 当应用程序启动时它保持主片段A 然后来自片段A 我&# 39; m导航到片段B ,从片段B 导航到片段C 。代码有效,它从片段B 打开片段C ,但首先打开片段A ,然后片段C 。为什么以及如何解决这个问题?我是否还需要一个活动来托管片段B,C?
切换片段的方法:
private Fragment contentFragment;
public void switchContent(Fragment fragment, String tag){
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
while (fragmentManager.popBackStackImmediate());
if (fragment != null){
FragmentTransaction transaction = fragmentManager
.beginTransaction();
transaction.replace(R.id.content_frame,fragment,tag);
if (!(fragment instanceof FragmentB)){
transaction.addToBackStack(tag);
}
transaction.addToBackStack(tag);
transaction.commit();
contentFragment = fragment;
}
}
R.id.content_frame 是布局的ID,用于活动 setContentView 。
答案 0 :(得分:0)
发生这种情况是因为在将当前片段替换为下一片段之前,您将弹出后栈中的所有片段。
你不需要这一行:
while (fragmentManager.popBackStackImmediate());
此外,这部分毫无意义:
if (!(fragment instanceof FragmentB)){
transaction.addToBackStack(tag);
}
transaction.addToBackStack(tag);
因为最后一行忽略了条件。
如果您希望将片段添加到除FragmentB
之外的后台堆栈,请尝试下一步编辑您的代码:
public void switchContent(Fragment fragment, String tag) {
if (fragment != null) {
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.content_frame, fragment, tag);
if (!(fragment instanceof FragmentB)){
transaction.addToBackStack(tag);
}
transaction.commit();
contentFragment = fragment;
}
}