Fragment如何调用所在Activity的dispatchTouchEvent(MotionEvent ev)函数
发布日期:2021-11-16 18:49:32 浏览次数:4 分类:技术文章

本文共 2095 字,大约阅读时间需要 6 分钟。

中讲过如何判断软键盘的弹出并隐藏,其中hideKeyboard()函数放在Activity的dispatchTouchEvent(MotionEvent ev)函数中就可以完美地使用:

public boolean dispatchTouchEvent(MotionEvent ev) {        // TODO Auto-generated method stub        if(ev.getAction()==MotionEvent.ACTION_DOWN)            if(hideKeyboard())                return false;        return super.dispatchTouchEvent(ev);    }

也就是说,如果Activity接受到down事件,就执行hideKeyboard(),并且如果返回true,也就是说键盘已经弹出并隐藏,此时返回false,不再把触摸时间分发给子控件.但是如果在Fragment中,该如何使用父Activity的dispatchTouchEvent函数呢?

第一想到接口,在父Activity中定义一个接口

public interface OnHideKeyboardListener{        public boolean hideKeyboard();    }

接着再定义设置接口函数

public void setOnHideKeyboardListener(OnHideKeyboardListener onHideKeyboardListener){        this.onHideKeyboardListener = onHideKeyboardListener;    }

当然,要先在Activity中加上

private OnHideKeyboardListener onHideKeyboardListener;

在Fragment中覆写onAttach函数

public void onAttach(Activity activity) {    // TODO Auto-generated method stub    OnHideKeyboardListener onHideKeyboardListener = new OnHideKeyboardListener() {        @Override        public boolean hideKeyboard() {            // TODO Auto-generated method stub            if(inputMethodManager.isActive(searchEditText)){                getView().requestFocus();                                   inputMethodManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().                      getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);                return true;            }            return false;        }    };    ((TabFragment)getActivity()).setOnHideKeyboardListener(onHideKeyboardListener);    super.onAttach(activity);}

最后,在Acitivity中覆写dispatchTouchEvent(MotionEvent)函数

public boolean dispatchTouchEvent(MotionEvent ev) {        // TODO Auto-generated method stub        if(onHideKeyboardListener != null){            if(ev.getAction() == MotionEvent.ACTION_DOWN){                if(onHideKeyboardListener.hideKeyboard()){                    return false;  //不在分发触控给子控件                }            }        }        return super.dispatchTouchEvent(ev);    }

这样,在Fragment中,键盘弹出来,只要手指一触摸屏幕,键盘就能消失,并且不会触发子控件的触摸事件.

转载地址:https://blog.csdn.net/Thare_Lam/article/details/49130181 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android中Listview的getChildAt()只能更新当前显示在屏幕上的Item的解决办法
下一篇:Android判断软键盘弹出并隐藏的简单完美解决方案

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月14日 08时33分18秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java blockingqueue源码_Java并发队列BlockingQueue实现之ArrayBlockingQueue源码分析 2019-04-21
Java前台显示近20天的东西_第十次课:前台首页设计及显示商品信息 2019-04-21
java开发web网站的路由设计_理解Web路由(浅谈前后端路由与前后端渲染) 2019-04-21
excel如何把顺序倒过来_在excel中怎么使文字颠倒顺序反过来显示呢? 2019-04-21
java 62进制 转换_序列号生成的另一种玩法--62进制如何玩? 2019-04-21
php正则表达式获取图片路径,php 常用正则表达式实例(图片地址,与指定内容获取)... 2019-04-21
脚本语言php是什么意思,PHP脚本语言 2019-04-21
matlab数学规划模型,数学规划模型 2019-04-21
视频提取音频php,如何提取视频中的音频,从视频文件中提取出音频输出成MP3格式... 2019-04-21
diy.php添加验证码,织梦dedecms自定义表单中加入验证码 2019-04-21
在php脚本中 通过可以获取,在PHP中,可以使用Unix时间戳获取精确的脚本执行时间。... 2019-04-21
s2-045 php exp,S2-045-EXP.py --Struts2任意代码执行漏洞 (S2-045,CVE-2017-5638) 2019-04-21
linux sdk 窗口句柄,Venus: 针对Linux平台上,对常用的系统API进行面向对象的封装SDK。... 2019-04-21
c语言程序设计 科学出版社习题答案,C语言程序设计(科学出版社)第4章 课后习题参考答案.doc... 2019-04-21
c语言 无错 但只运行一半,求哈夫曼编码时程序运行到一半就终止了,编译无错... 2019-04-21
deepin linux 2014安装,2014.2版本的Deepin虚拟机安装浅谈(就是深度Linux) 2019-04-21
android 限速工具,Android下载器之限速篇 2019-04-21
html刷新ajax实现原理,AJAX的原理—如何做到异步和局部刷新 2019-04-21
html中列表菜单加文字请选择,html中下拉菜单 2019-04-21
读书郎平板中android,读书郎学生平板电脑怎么用 使用方法详解【图文】 2019-04-21