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)
您必须实现自己的 backstack 实现,如此处所述
使用 Fragments 为 Android 中的每个选项卡单独的返回堆栈
每当您单击片段中的后退按钮时,您都可以调用 popFragments() ;每当您从一个片段导航到另一个片段时,您都可以调用 pushFragments() 。
简而言之,
public void onBackPressed()
{
FragmentManager fm = getActivity().getSupportFragmentManager();
fm.popBackStack();
}
Run Code Online (Sandbox Code Playgroud)