Android:在背面按下返回上一个片段

Hvn*_*Hvn 18 android android-fragments back-stack android-navigation

我已经实现了Navigation Drawer,它是Activity的子类.我的应用程序中有很多片段.我的问题在这里

想象一下有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按下的应用程序中想要这样的东西

Fragment_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();
Run Code Online (Sandbox Code Playgroud)

我尝试在我的MainActivity中覆盖onBackPressed():

@Override
public void onBackPressed() {


        getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        int count = getFragmentManager().getBackStackEntryCount();
        if (count == 0)
               super.onBackPressed();
    }
Run Code Online (Sandbox Code Playgroud)

小智 35

将您的Activity#onBackPressed()方法更新为:

@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() > 0) {
        getFragmentManager().popBackStack();
    } else {
        super.onBackPressed();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

从文档:

此函数是异步的 - 它将请求排入pop,但在应用程序返回其事件循环之前不会执行该操作.

参考:http://developer.android.com/reference/android/app/FragmentManager.html#popBackStack(java.lang.String,%20int)


Sam*_*Sam 3

您必须实现自己的 backstack 实现,如此处所述

使用 Fragments 为 Android 中的每个选项卡单独的返回堆栈

每当您单击片段中的后退按钮时,您都可以调用 popFragments() ;每当您从一个片段导航到另一个片段时,您都可以调用 pushFragments() 。

简而言之,

public void onBackPressed()
{
    FragmentManager fm = getActivity().getSupportFragmentManager();
    fm.popBackStack();
}
Run Code Online (Sandbox Code Playgroud)