我的应用有这个流程
Activity (TabLayout) -> Fragment 1 -> Fragment 2 -> Fragment 3
当我要么回到片段2或片段3时,我已经回到片段1.如果我在片段3上,我想回到片段2。
从片段1到片段2
Frag2 childFrag = new Frag2();
getChildFragmentManager().beginTransaction().add(R.id.frag2_frame, childFrag)
.addToBackStack(null)
.commit();
从片段2到片段3
Frag3 childFrag = new Frag3();
getChildFragmentManager().beginTransaction().add(R.id.frag3_frame, childFrag)
.addToBackStack(null)
.commit();
onBackPressed in Activity
// a fragments list for tablayout
ArrayList<Fragment> fragments = new ArrayList<>();
public void onBackPressed(){
fragments.get(selectedTab).getChildFragmentManager().popBackStack();
}
答案 0 :(得分:0)
尝试添加backStack
Frag2 childFrag = new Frag2();
getFragmentManager().beginTransaction().add(R.id.frag2_frame, childFrag)
.addToBackStack("Frag2 ")
.commit();
答案 1 :(得分:0)
将片段1添加到活动后,我相信您需要使用getChildFragmentManager()
从片段添加其他片段。此方法适用于扩展Fragment的类。
正如您所说的使用getChildFragmentManager()
,我会使用.beginTransaction().replace(...)
代替.beginTransaction().add(...)
。
答案 2 :(得分:0)
尝试找到最深的片段。然后popBackStack就在那里。
List<Fragment> fs2 = fragments.get(selectedTab).getChildFragmentManager().getFragments().get(0).getChildFragmentManager().getFragments();
FragmentManager f = fragments.get(selectedTab).getChildFragmentManager();
while (fs2.size() > 0) {
fs2 = fs2.get(0).getChildFragmentManager().getFragments();
f = f.getFragments().get(0).getChildFragmentManager();
}
f.popBackStack();