【问题标题】:call popBackStack result more than one times of onBackPressed多次调用 onBackPressed 的 popBackStack 结果
【发布时间】:2018-04-25 13:00:55
【问题描述】:

我的应用有这个流程

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

// a fragments list for tablayout
ArrayList<Fragment> fragments = new ArrayList<>();    

public void onBackPressed(){
    fragments.get(selectedTab).getChildFragmentManager().popBackStack();
}

【问题讨论】:

    标签: android android-fragments android-tablayout


    【解决方案1】:

    尝试添加 backStack

    Frag2 childFrag = new Frag2();
    getFragmentManager().beginTransaction().add(R.id.frag2_frame, childFrag)
        .addToBackStack("Frag2 ")
        .commit(); 
    

    【讨论】:

      【解决方案2】:

      将片段 1 添加到 Activity 后,我相信您需要使用 getChildFragmentManager() 来添加来自片段的其他片段。此方法适用于扩展 Fragment 的类。


      编辑


      正如你所说,你使用的是getChildFragmentManager(),我会使用.beginTransaction().replace(...) 而不是.beginTransaction().add(...)。

      【讨论】:

      • 对不起。是getChildFragmentManager()。已编辑。我的坏
      • .replace 也返回相同的结果
      【解决方案3】:

      尝试找到最深的片段。然后就在那里弹出BackStack。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-27
        • 1970-01-01
        • 2021-02-10
        • 2014-04-12
        • 2019-01-06
        • 1970-01-01
        相关资源
        最近更新 更多