Android-模拟后退按钮


71

当我按我的应用程序中的按钮时,我需要返回上一个活动。

有任何想法吗?

Answers:


96

finish()从您要结束的活动中进行呼叫应注意这一点。

多年后编辑:仍然有效,但这有点笨拙。当我最初发布此内容时,它Fragments不存在,并且(如几位评论者所指出的那样)Fragments涉及此内容时,它的工作方式也不尽相同。如果您正在使用,现在有更好的方法Fragments.


7
无需道歉,很高兴为您提供帮助!
克里斯·汤普森

18
这不会模拟后退按钮。如果您仅使用活动,则可以,但是如果您在活动中使用片段,则将所有与活动一起的片段关闭。
Tasomaniac

11
@tasomaniac似乎getFragmentManager()。popBackStack()完成了片段的工作。
穆罕默德

1
当您覆盖了后退按钮以执行其他操作(例如高度自定义的布局)时,该按钮也将不起作用
Muz

1
它也不会允许超越晶体管。
erik 2014年

74

仅供记录:在某些情况下,所描述的方法与后退按钮的功能不同,但是您可以调用

this.onBackPressed();

要么

getActivity().onBackPressed();

如果您处于零碎的状态以实现相同的行为。


6
据我所知,这是最好的答案。谢谢。
约翰·沃德

1
这是正确的解决方案,但请确保您位于UI线程上,否则将无法使用。
phatmann

38

使用片段时:

getFragmentManager().popBackStack();

要么

getSupportFragmentManager().popBackStack();

如果您使用的是android.support.v4.app软件包


在我的情况下,它并没有影响(重置)工具栏(我正在使用导航菜单以及在mobile_navigation.xml中声明的许多片段)。但是它确实会返回。
YoussefDir

2

这适用于以下情况:同一片段有时可能是一个活动中的唯一片段,有时甚至是多片段活动的一部分,例如在同时可见两个片段的平板电脑上。

/**
 * Method that can be used by a fragment that has been started by MainFragment to terminate
 * itself. There is some controversy as to whether a fragment should remove itself from the back
 * stack, or if that is a violation of the Android design specs for fragments. See here:
 * http://stackoverflow.com/questions/5901298/how-to-get-a-fragment-to-remove-itself-i-e-its-equivalent-of-finish
 */
public static void fragmentImplementCancel(Fragment fragment) {

    FragmentActivity fragmentActivity = fragment.getActivity();
    FragmentManager fragmentManager = fragmentActivity.getSupportFragmentManager();

    if (fragmentManager.getBackStackEntryCount() == 1) {
        fragmentManager.popBackStack();
    }
    else {
        fragmentActivity.finish();
    }
}

例如,可以调用此代码来实现“取消”按钮。

    if (theButton.getId() == R.id.btnStatusCancel) {
        StaticMethods.fragmentImplementCancel(this);
    }

-1

您可以欺骗按下后退按钮的向上按钮通话:

@Override
public void onBackPressed() {
    onNavigateUp();
}

问题将返回到单击按钮的上一个活动。
Raj kannan Iyyappan '18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.