在Android中,如何在按钮点击时触发后退按钮功能?

57

我知道 Android 中有返回按钮可以让我们回到上一个界面,但是我的团队领导要求在按钮点击时实现返回功能。

我应该怎么做呢?

7个回答

127

当用户点击按钮以返回上一个活动时,您应该使用finish()

Button backButton = (Button)this.findViewById(R.id.back);
backButton.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
    finish();
  }
});

或者,如果你确实需要的话,可以尝试触发自己的后退键按下:

this.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
this.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));

执行这两个命令。


我不能使用finish()... 实际上,我有一个名为“日程安排日期表单”的表单,在其中我想使用“安排”和“返回”按钮... “安排”按钮将安排日期,如果用户想要取消安排日期,则可以使用“返回”按钮功能上的“取消”按钮。 - Sourabh
7
为了通过dispatchKeyEvent触发“返回”按钮,您需要先触发ACTION_DOWN,然后是ACTION_UP。这模拟了按下按钮的过程。如果没有同时触发这两个事件,“返回”按钮将不会被触发。 - Ifrit
3
返回按钮总是会结束吗?我不这么认为。那么碎片操作呢? - alicanbatur
@JaySoyer的评论是对我的情况正确的,为了能够模拟后退按钮按下事件,我必须分发ACTION_DOWN和ACTION_UP事件! - toantran
实际上,我尝试了所有这些方法:finish()onBackPressed() 和分发按键事件,但都没有像我预期的那样工作。所有这些方法和实际的返回点击之间的区别在于,返回点击直接调用前一个活动的onResume()方法,而其他方法调用onCreate()方法。我不知道如何模拟精确的行为... - hiddeneyes02

37
如果您需要在自定义按钮中使用后退按钮的确切功能,为什么不直接调用yourActivity.onBackPressed(),这样如果您覆盖了后退按钮的功能,您的自定义按钮将表现相同。

我不能使用finish()... 实际上,我有一个名为“日程安排日期表单”的表单,在其中我想使用“安排”和“返回”按钮... “安排”按钮将安排日期,如果用户想要取消安排日期,则可以使用“返回”按钮功能上的“取消”按钮。 - Sourabh
12
不确定那个评论与我的回答有什么关系...我并不是要求你调用finish(),而是在菜单按钮点击时调用onBackPressed()。 - ekawas

10
public boolean onKeyDown(int keyCode, KeyEvent event) {
             if (keyCode == KeyEvent.KEYCODE_BACK) {
                     // your code here
                     return false;
             }
         return super.onKeyDown(keyCode, event);
     }

8

6
如果您在片段内部,则可以在单击侦听器中编写以下代码行:getActivity().onBackPressed();,这对我来说非常有效。

5

使用这段代码,我解决了我的问题。如果需要返回按钮,请粘贴以下两行代码。希望这能帮到你。

只需将此代码粘贴到按钮点击事件中即可。

super.onBackPressed();

例子:

Button backButton = (Button)this.findViewById(R.id.back);
backButton.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
    super.onBackPressed();
  }
});

1

嗯,@sahhhm的回答对我没用,我需要从自定义按钮触发后退键,所以我只需调用以下代码:

backAction.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MyRides.super.onBackPressed();

            }
});

它的工作效果很好。希望它也能帮助其他人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接