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

 更新时间:2017年11月20日 10:38:45   作者:他叫自己MR张  
这篇文章主要介绍了Android开发实现Fragment监听返回键事件功能的方法,结合实例形式分析了Android使用Fragment监听并屏蔽返回键按钮的实现方法与相关操作技巧,需要的朋友可以参考下

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

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

背景

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

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

代码实现

XXX_Fragment
@Override
public 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基本组件用法总结》、《Android开发入门与进阶教程》、《Android布局layout技巧总结》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android资源操作技巧汇总》及《Android控件用法总结

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

相关文章

  • Listview加载的性能优化是如何实现的

    Listview加载的性能优化是如何实现的

    在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,接下来通过本文给大家介绍Listview加载的性能优化是如何实现的,对listview性能优化相关知识感兴趣的朋友一起学习吧
    2016-01-01
  • Android编写简易文件管理模块

    Android编写简易文件管理模块

    这篇文章主要为大家详细介绍了Android编写简易文件管理模块的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Android四大组件之Activity详解

    Android四大组件之Activity详解

    今天小编就为大家分享一篇关于Android四大组件之Activity详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Android客户端与服务端数据加密传输方案详解

    Android客户端与服务端数据加密传输方案详解

    这篇文章主要为大家介绍了Android客户端与服务端数据加密传输方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • android View 绘制完成监听的实现方法

    android View 绘制完成监听的实现方法

    今天小编就为大家分享一篇android View 绘制完成监听的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Android开发之如何自定义数字键盘详解

    Android开发之如何自定义数字键盘详解

    这篇文章主要给大家介绍了关于Android开发之如何自定义数字键盘的相关资料,本文语言是基于kotlin实现的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-09-09
  • Android入门之使用OKHttp多线程下载文件

    Android入门之使用OKHttp多线程下载文件

    OkHttp是一个神器。OkHttp分为异步、同步两种调用。今天我们就会基于OkHttp的异步调用实现一个多线程并行下载文件并以进度条展示总进度的实用例子,需要的可以参考一下
    2023-01-01
  • android长截屏原理及实现代码

    android长截屏原理及实现代码

    本篇文章主要介绍了android长截屏原理及实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Flutter WebView 预加载实现方法(Http Server)

    Flutter WebView 预加载实现方法(Http Server)

    这篇文章主要介绍了Flutter WebView 预加载实现方法,包括资源的配置,资源的下载和存储,版本的管理,如何根据实际url获取对应HttpServer bind的url等,需要的朋友可以参考下
    2022-05-05
  • Flutter获取ListView当前正在显示的Widget信息(应用场景)

    Flutter获取ListView当前正在显示的Widget信息(应用场景)

    ListView是Flutter里最常用的Widget了,当屏幕放不下的时候,它可以自带滚动功能,用法也很简单,本文通过实例代码给大家介绍Flutter获取ListView当前正在显示的Widget信息,感兴趣的朋友一起看看吧
    2022-05-05

最新评论