安卓方法——onBackPressed()

本文介绍了在Android应用中处理Back键的方法。提供了两种处理Back键事件的技术:一是通过重写onKeyDown方法;二是从Android 2.0开始提供的onBackPressed方法。文章还详细解释了这两种方法的使用场景和代码示例。

多网友不明白如何在Android平台上捕获Back键的事件,Back键是手机上的后退键,一般的软件不捕获相关信息可能导致你的程序被切换到后台,而回到桌面的尴尬情况,在Android上有两种方法来获取该按钮的事件。

  1.直接获取按钮按下事件,此方法兼容Android 1.0到Android 2.1 也是常规方法,直接重写Activity的onKeyDown方法即可,代码如下:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { //按下的如果是BACK,同时没有重复
       Toast.makeText(ml78.this,"魔力去吧Back键测试",1).show();
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

 而对于Android 2.0开始又多出了一种新的方法,对于Activity 可以单独获取Back键的按下事件,直接重写onBackPressed方法即可,代码如下

@Override
public void onBackPressed() {
// 这里处理逻辑代码,大家注意:该方法仅适用于2.0或更新版的sdk
return;
}


转载:http://blog.youkuaiyun.com/mingxunzh/archive/2010/04/17/5497948.aspx



原文链接:http://www.cnblogs.com/qiluboy/p/5308310.html

一、onBackPressed()方法的解释

 这个方法放在

void android.app.Activity.onBackPressed()

  在安卓API中它是这样解释的:

public void onBackPressed ()

Added in API level 5

Called when the activity has detected the user's press of the back key. The default implementation simply finishes the current activity, but you can override this to do whatever you want.

我用有道词典翻译了一下:调用活动检测到用户的按的键。默认实现简单地完成当前的活动,但是你可以覆盖这个做任何你想做的。
我的理解就是:当用户在按这个键的时候,会调用这个方法。

这是Android 2.0开始多出了一种新的方法,对于Activity 可以单独获取Back键的按下事件,直接重写onBackPressed方法即可。

二、onBackPressed()方法的使用

   

1
2
3
4
5
6
7
public void onBackPressed() {
 
        Intent intent=new Intent();
        intent.putExtra("data_return""相信自己");
        setResult(RESULT_OK, intent);
        super.onBackPressed();<br>                return;
      }

 大家注意:该方法仅适用于2.0或更新版的sdk

关于这个return我也不怎么清楚,我查了很多资料,都说用到return但是都不清楚用return有什么作用。希望大家可以去搜集更多的资料。我试了试不用return 程序也是可以运行的。

此外,给大家说一下back键和home键的区别:

back键
Android的程序无需刻意的去退出,当你一按下手机的back键的时候,系统会默认调用程序栈中最上层Activity的Destroy()方法来, 销毁当前Activity。当此Activity又被其它Activity启动起来的时候,会重新调用OnCreate()方法进行创建,当栈中所有 Activity都弹出结束后,应用也就随之结束了.如果说程序中存在service之类的,则可以在恰当的位置监听处理下也就可以了.

home键
Android程序的隐藏,当你按下手机的Home键的时候,系统会默认调用程序栈中最上层Activity的stop()方法,然后整个应用程序都会被 隐藏起来,当你再次点击手机桌面上应用程序图标时,系统会调用最上层Activity的OnResume()方法,此时不会重新打开程序,而是直接进入, 会直接显示程序栈中最上层的Activity。

back键默认把当前Activity给finish,home键只是把Activity给onStop.

 

实现按Home键时隐藏程序的效果:
1:Android 2.0之前需要监听按键事件,进行判断是不是按下了back键
2:Android 2.0之后系统提供了一个onBackPressed()方法,这个方法就是专门用来监听back键事件的,所以只需重写onBackPressed()方法即可

复制代码
public void onBackPressed() {
                 // super.onBackPressed();这句话一定要注销,不然又去调用默认的back处理方式了
        Intent intent=new Intent();
        intent.putExtra("data_return", "相信自己");
        setResult(RESULT_OK, intent);
        
      }
复制代码
### 如何正确使用 Android `onBackPressed` 方法 #### 使用 `OnBackPressedDispatcher` 自 AndroidX Activity 1.0.0 版本起,可以利用 `OnBackPressedDispatcher` 来处理返回按键事件。这允许在应用程序的不同部分(如 Fragment 或其他组件)注册回调函数来响应返回键按下操作[^1]。 ```java // 在Activity中初始化并获取OnBackPressedDispatcher实例 getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true /* enabled by default */) { @Override public void handleOnBackPressed() { // 处理返回按钮点击逻辑 // 如果不需要进一步传播此事件,则不执行super.handleOnBackPressed() } }); ``` 当希望某个特定条件满足时才触发默认行为,可以在重写的方法体内判断是否调用父类方法: ```java @Override public void handleOnBackPressed() { if (someCondition) { super.handleOnBackPressed(); } else { // 自定义逻辑 } } ``` #### 结合 Fragment 实现复杂场景下的返回功能 对于更复杂的导航需求,比如从一个片段返回另一个片段的情况,可以通过管理回退栈的方式实现。下面是一个简单的例子展示如何在一个名为 `Fragment3` 的类里设置返回到 `Fragment1` 的逻辑[^2]。 ```java public class Fragment3 extends BaseFragment implements View.OnClickListener { private static final String TAG = "Fragment3"; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment3, container, false); findViewById(R.id.iv_back).setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ popBackStackTo(Fragment1.class.getName(), POP_BACK_STACK_INCLUSIVE); } }); return view; } /** * Pop back stack to target fragment. */ protected void popBackStackTo(String name, int flags) { getFragmentManager().popBackStack(name, flags); } } ``` 这里的关键在于理解 `FragmentManager.popBackStack()` 和其参数的意义。通过指定目标片段名称以及标志位 `POP_BACK_STACK_INCLUSIVE` 可以确保清除所有位于当前顶部及其之上的记录直到找到匹配项为止。 #### 总结 Android 提供了多种途径让开发者能够有效地控制应用内的页面流转过程。无论是简单地覆盖 `onBackPressed()` 函数还是采用更加现代化的做法——借助于 `OnBackPressedDispatcher` API ,都能帮助构建流畅自然的应用体验[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值