首页 > 系统 > Android > 正文

Android开发实现Fragment监听返回键事件功能的方法

2019-10-22 18:22:54
字体:
来源:转载
供稿:网友

本文实例讲述了Android开发实现Fragment监听返回键事件功能的方法。分享给大家供大家参考,具体如下:

前面的文章Android开发教程之Fragment定义、创建与使用方法详细讲述了Fragment的基本概念与用法。这里再来分析一下Fragment监听返回键事件的具体应用。

背景

项目要求用户注册成功后进入修改个人资料的页面,且不允许返回到上一个页面,资料修改完成后结束当前页面,进入APP主页。

由于是使用多个Fragment完成注册流程,就需要Fragment监听用户点击手机上的返回按钮,查了一些资料,加上自己使用过程中发现的问题,特此记录,帮助更多有此需求的朋友

代码实现

XXX_Fragment@Overridepublic void onResume() {    super.onResume();    getFocus();}//主界面获取焦点private void getFocus() {    getView().setFocusableInTouchMode(true);    getView().requestFocus();    getView().setOnKeyListener(new View.OnKeyListener() {      @Override      public boolean onKey(View v, int keyCode, KeyEvent event) {        if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {          // 监听到返回按钮点击事件          ......          return true;        }        return false;      }    });}

以上代码是stackoverflow.com中找到的一个解决方案,但是在使用时,由于Fragment页面里可能有其他能获取焦点的View(例如EditText),会导致监听失效,点击返回键会返回到上个页面。

更完善的解决方案:

除了上面的代码,我们需要对可以获取焦点的View的setOnKeyListener进行处理,这里以一个EditText为例:

//private EditText nickname;nickname.setOnKeyListener(new View.OnKeyListener() {  @Override  public boolean onKey(View v, int keyCode, KeyEvent event) {    if (keyCode == KeyEvent.KEYCODE_BACK        && event.getAction() == KeyEvent.ACTION_UP) {      //关闭软键盘      InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);      imm.hideSoftInputFromWindow(nickname.getWindowToken(), 0);      //使得根View重新获取焦点,以监听返回键      getFocus();    }    return false;  }});

 

希望本文所述对大家Android程序设计有所帮助。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表