Android 维护以前活动的备份

Android 维护以前活动的备份,android,android-fragments,back,fragment-backstack,Android,Android Fragments,Back,Fragment Backstack,我有两个活动A和B,在活动A中,我管理了片段回栈,但在一种情况下如下所示: 我在活动中有4个片段,从片段1到2到3到4,然后从第4个片段到活动B,现在我想要的是按下后退按钮,活动的片段4应该打开,然后是后面的片段3,依此类推 我使用以下函数替换片段并管理后堆栈 private void changeFragment(Fragment fragment) { FragmentManager fragmentManager = getSupportFragmentManager();

我有两个活动A和B,在活动A中,我管理了片段回栈,但在一种情况下如下所示: 我在活动中有4个片段,从片段1到2到3到4,然后从第4个片段到活动B,现在我想要的是按下后退按钮,活动的片段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个片段转到活动B,再回到活动A时,我无法管理活动A的后一堆片段


我不知道如何开始。

你可以在你的活动中覆盖
onBackPressed
,检查哪个片段在上面,然后决定你想做什么:

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

你可以在你的活动中覆盖
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“容器上的片段”

使用此代码更改片段

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“要添加的片段”

HIDEFRAGENT“容器上的片段”

只需在提交之前使用
addToBackStack(tag\u name)

您可以在kotlin中添加en扩展功能

fun AppCompatActivity.replaceFragment(containerId: Int, fragment: Fragment) =

      supportFragmentManager.beginTransaction()
                            .replace(containerId, fragment, fragment.javaClass.name)
                            .addToBackStack(fragment.javaClass.name).commit()
   

只需在提交之前使用
addToBackStack(tag\u name)

您可以在kotlin中添加en扩展功能

fun AppCompatActivity.replaceFragment(containerId: Int, fragment: Fragment) =

      supportFragmentManager.beginTransaction()
                            .replace(containerId, fragment, fragment.javaClass.name)
                            .addToBackStack(fragment.javaClass.name).commit()
   

您必须为两个活动维护两个堆栈。尽管您可以在同一活动中管理片段。我建议你看看这个github项目。[.这些人做了一个很好的实现。@Rajesh你有解决方案吗..如果有,请指导我,你必须为两个活动维护两个堆栈。虽然你可以在同一个活动中管理片段。我建议你看看这个github项目。[.这些人做了一个很好的实施。@Rajesh你有解决方案吗..如果有,请给我同样的指导