Android:返回时返回上一个片段 [英] Android : Return to previous fragment on back press

查看:114
本文介绍了Android:返回时返回上一个片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have implemented Navigation Drawer which is a subclass of Activity. I have many fragments in my application. My question goes here

想象一下有3个片段:

Fragment_1:Fragment_2:Fragment_3

Fragment_1 : Fragment_2 : Fragment_3

启动我的应用程序时,将加载Fragment_1当我单击Fragment_1上的某些组件时,我导航到Fragment_2,依此类推.

When I start my application, Fragment_1 is loaded When I click on some components on Fragment_1, I'm navigated to Fragment_2 and so on..

所以就像

Fragment_1> Fragment_2> Fragment_3

Fragment_1 > Fragment_2 > Fragment_3

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

When I press back key from Fragment_2, I'm navigated back to Fragment_1 But when I press back key from Fragment_3, I'm navigated back to Fragment_1 (instead of Fragment_2)

我希望在按Back键的应用程序中有类似的内容

I want something like this in my application on Back Key press

Fragment_1<Fragment_2<Fragment_3

Fragment_1 < Fragment_2 < Fragment_3

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

I have used Fragment, FragmentManager, FragmentTransaction as follows :

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

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

,然后我尝试在MainActivity中重写onBackPressed():

and I tried overriding onBackPressed() in my MainActivity :

@Override
public void onBackPressed() {


        getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        int count = getFragmentManager().getBackStackEntryCount();
        if (count == 0)
               super.onBackPressed();
    }

推荐答案

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

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

您的实现无效的原因是因为方法 FragmentManager#popBackStack()是异步的,调用后不会立即发生.

The reason your implementation doesn't work is because the method FragmentManager#popBackStack() is asynchronous and does not happen right after it is called.

从文档中:

此函数是异步函数-它使要弹出的请求入队,但是直到应用程序返回其事件循环时才执行该操作.

This function is asynchronous -- it enqueues the request to pop, but the action will not be performed until the application returns to its event loop.

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

这篇关于Android:返回时返回上一个片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆