维护先前活动

时间:2016-12-12 09:33:41

标签: android android-fragments back fragment-backstack

我有2个活动A& B,在Activity A中我管理了片段后栈,但在一种情况下,如下所示: 我有4个片段在Activity中从片段1到2到3到4然后从第4个片段我现在去活动B我想要的是按下后退按钮片段4的Activity应该打开然后再返回片段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的堆栈片段。

我没有任何方法可以从它开始。

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

使用此代码更改片段

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“容器上的片段”

答案 2 :(得分:0)

只需在addToBackStack(tag_name)前使用commit

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

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

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