【问题标题】:Android - Simulate Back ButtonAndroid - 模拟返回按钮
【发布时间】:2010-04-27 00:29:37
【问题描述】:

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

有什么想法吗?

【问题讨论】:

    标签: android button back


    【解决方案1】:

    从您要结束的活动中调用 finish() 应该会处理好这个问题。

    多年后编辑:这仍然有效,但它有点过于严厉了。当我最初发布此内容时,Fragments 并不存在,并且(正如几位评论者所指出的)当涉及Fragments 时,这并不完全一样。如果您使用Fragments.

    ,现在有更好的方法

    【讨论】:

    • 无需道歉,乐于助人!
    • 这不会模拟返回按钮。如果您只使用活动,那没关系,但如果您在活动中使用片段,这将关闭所有与活动一起的片段。
    • @tasomaniac 似乎 getFragmentManager().popBackStack() 为片段完成了工作。
    • 当您覆盖后退按钮以执行其他操作(例如高度自定义的布局)时,它也不起作用
    • 它也不允许覆盖转换。
    【解决方案2】:

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

    this.onBackPressed();
    

    getActivity().onBackPressed();
    

    如果你在一个片段中实现完全相同的行为。

    【讨论】:

    • 据我所知,这是最好的答案。谢谢。
    • 这是正确的解决方案,但请确保您在 UI 线程上,否则它将无法工作。
    【解决方案3】:

    使用片段时:

    getFragmentManager().popBackStack();
    

    getSupportFragmentManager().popBackStack();
    

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

    【讨论】:

    • 它并没有影响(重置)我的工具栏(我使用的是导航菜单和在 mobile_navigation.xml 中声明的许多片段)。但它确实会返回。
    【解决方案4】:

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

    /**
     * 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);
        }
    

    【讨论】:

      【解决方案5】:

      您可以在按下返回按钮时欺骗向上按钮调用:

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

      【讨论】:

      • 问题即将回到按钮点击的最后一个活动。
      猜你喜欢
      • 2011-03-08
      • 2014-09-27
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多