【问题标题】:Maintain fragments-backstack of previous Activity维护前一个Activity的fragments-backstack
【发布时间】:2017-04-27 03:17:40
【问题描述】:

我有 2 个 Activity A 和 B,在 Activity A 中我管理了片段回栈,但在一种情况下如下所示: 我在 Activity 中有 4 个片段从片段 1 到 2 到 3 到 4 然后从第 4 个片段我要去 Activity B 现在我想要的是按下后退按钮 Activity 的片段 4 应该打开,然后在后面的片段 3等等。

我正在使用以下函数来替换片段并管理回栈

  private void changeFragment(Fragment fragment) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
    fragmentManager.beginTransaction().replace(R.id.act_home_fl_container, fragment).commit();
}

后按

 boolean isPopFragment = getSupportFragmentManager().getBackStackEntryCount() > 0 ? true : false;
    if (isPopFragment) {
        getSupportFragmentManager().popBackStack();
    }

我在这里取得了成功,但是当我从第 4 个片段转到 Activity B 并返回到 Activity A 时,我无法管理 Activity A 的片段的回栈。

我不知道如何开始。

【问题讨论】:

  • 您必须为两个活动维护两个堆栈。尽管您可以在同一活动中管理片段。我建议你看看这个 github 项目。 [github.com/JetradarMobile/multibackstack] 。这些家伙做了一个非常好的实现。
  • @Rajesh 你有解决方案吗..如果有,请指导我

标签: android android-fragments back fragment-backstack


【解决方案1】:

您可以在您的活动中覆盖onBackPressed,检查哪个片段在顶部并根据需要决定做什么:

@Override
public void onBackPressed()
{
     // code here
     super.onBackPressed();  // check if you need this, depends on your needs
}

【讨论】:

    【解决方案2】:

    使用此代码更改片段

    public static void addFragment( final Fragment newFragment, final Fragment hideFragment) {
        final FragmentManager fragmentManager = getFragmentManager();
        final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.hide(hideFragment);
        fragmentTransaction.add(R.id.activity_home_container, newFragment, newFragment.getClass().getSimpleName());
        fragmentTransaction.addToBackStack(hideFragment.getClass().getSimpleName());
        fragmentTransaction.commitAllowingStateLoss();
    }
    

    newFragment "你要添加的片段"
    hideFragment "容器上的片段"

    【讨论】:

      【解决方案3】:

      commit之前使用addToBackStack(tag_name)

      可以在kotlin中添加en扩展函数

      fun AppCompatActivity.replaceFragment(containerId: Int, fragment: Fragment) =
      
            supportFragmentManager.beginTransaction()
                                  .replace(containerId, fragment, fragment.javaClass.name)
                                  .addToBackStack(fragment.javaClass.name).commit()
         
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多