【问题标题】:How to add nested fragment to backstack inside a tabbed view pager?如何将嵌套片段添加到选项卡式视图寻呼机内的 backstack?
【发布时间】:2018-04-30 06:47:04
【问题描述】:

我的应用程序包含两个选项卡,在两个选项卡内每个选项卡都有 4-5 个嵌套片段,在嵌套片段 addtobackstack 内不起作用? 如何将嵌套片段添加到 backstack,因为当我单击嵌套片段中的后退按钮时,我的应用正在关闭意味着它正在调用 super.onBackKeyPressed 方法。

【问题讨论】:

    标签: android android-fragments android-viewpager android-view android-tablayout


    【解决方案1】:

    在您的活动中添加此代码

    public void onBackPressed() {
        FragmentManager fm = getSupportFragmentManager();
        if (fm.getFragments() != null) {
            for (Fragment frag : fm.getFragments()) {
                if (frag.isVisible()) {
                    FragmentManager chilFrag = frag.getChildFragmentManager();
                    if (chilFrag.getBackStackEntryCount() > 0) {
                        chilFrag.popBackStack();
                        return;
                    }
                }
            }
         }
        super.onBackPressed();
    }
    

    【讨论】:

      【解决方案2】:

      你应该使用 ChildFragmentManager

      这是片段替换功能。

      fun replace(fragment: Fragment){
        childFragmentManager
          .beginTransaction()
          .replace(R.id.fragmentContainer, fragment)
          .commit()
      }
      

      并覆盖大多数父片段中的 onBackPressed 方法。

      override fun onBackPressed() {
      val pop = childFragmentManager.popBackStackImmediate()
      if (!pop){
        super.onBackPressed()
      }
      

      }

      我是用 kotlin 写的,希望你能理解。如果需要更多信息,请向我询问。

      【讨论】:

      • 你能详细说明一下吗?
      • 我应该在 viewpager 内使用还是嵌套片段?
      【解决方案3】:

      使用ChildFragmentManager 并检查活动标签是否有BackStackEntry,如果有,则弹出回栈,否则调用super.onBackKeyPressed

      对此答案的完整描述: https://stackoverflow.com/a/37961649/4832356

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-04
        • 1970-01-01
        • 2015-10-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多