Android如何回到前面的片段?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

我的应用程序中有很多片段。我的问题在这里:

想象一下有3个片段:

Fragment_1:Fragment_2:Fragment_3

当我开始我的应用程序时,Fragment_1被加载当我点击Fragment_1上的一些组件时,我被导航到Fragment_2等。

所以就是这样:

Fragment_1> Fragment_2> Fragment_3

当我从Fragment_2中按下返回键时,我被导航回Fragment_1但是当我从Fragment_3按下返回键时,我被导航回Fragment_1(而不是Fragment_2)

我想在Back Key按钮的应用程序中使用这样的东西:

片段_1 <Fragment_2 <Fragment_3

我已经使用了Fragment,FragmentManager,FragmentTransaction如下:

MyFragment fragment = new MyFragment();
FragmentManager fragmentManager = getFragmentManager();

fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).addToBackStack(null)commit();

我尝试在我的MainActivity中重写onBackPressed():

@Override
public void onBackPressed() {


        getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        int count = getFragmentManager().getBackStackEntryCount();
        if (count == 0)
               super.onBackPressed();
    }
提问于
用户回答回答于

你必须按照此处所述执行你自己的后台堆栈进行实施:

当你单击片段中的后退按钮,都可以调用popFragments(),并在你从一个片段导航到其他片段时调用pushFragments()。

代码如下:

public void onBackPressed()
{
    FragmentManager fm = getActivity().getSupportFragmentManager();
    fm.popBackStack();
}
用户回答回答于

你需要将你的Activity#onBackPressed()方法更新为:

@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() > 0) {
        getFragmentManager().popBackStack();
    } else {
        super.onBackPressed();
    }
}

你的实现不起作用的原因是因为该方法FragmentManager#popBackStack()是异步的,并且在它被调用后不会发生。

从文档:

这个函数是异步的 - 它将请求排入队列,但是直到应用程序返回到它的事件循环才会执行该动作。

扫码关注云+社区