调用popBackStack结果超过onBackPressed的一倍

时间:2018-04-25 13:00:55

标签: android android-fragments android-tablayout

我的应用有这个流程

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();
}

3 个答案:

答案 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();