维护先前活动的碎片背包



我有2个Activites A&B,在活动A中我管理了片段后堆栈,但在一个情况下如下:我有4个从片段1到2到3到4的活动的片段,然后从第四片段开始,我要去活动B现在我想要的是,在Back Button Buttrant frack frack 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();
    }

我在这里取得了成功,但是当我从第四片段开始活动B并回到活动A时,我无法管理Activity的片段A的背堆。

我没有任何方法。

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

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

使用此代码更改片段

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"在容器上的片段"

只需在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()
   

最新更新