Fragment如何调用所在Activity的dispatchTouchEvent(MotionEvent ev)函数
来源:互联网 发布:御龙在天淘宝商城 编辑:程序博客网 时间:2024/05/23 01:18
上一篇博客中讲过如何判断软键盘的弹出并隐藏http://www.cnblogs.com/thare1307/p/4617558.html
其中hideKeyboard()函数放在Activity的dispatchTouchEvent(MotionEvent ev)函数中就可以完美地使用
public boolean dispatchTouchEvent(MotionEvent ev) {// TODO Auto-generated method stubif(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 stubOnHideKeyboardListener onHideKeyboardListener = new OnHideKeyboardListener() {@Overridepublic boolean hideKeyboard() {// TODO Auto-generated method stubif(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 stubif(onHideKeyboardListener != null){if(ev.getAction() == MotionEvent.ACTION_DOWN){if(onHideKeyboardListener.hideKeyboard()){return false; //不在分发触控给子控件}}}return super.dispatchTouchEvent(ev);}
这样,在Fragment中,键盘弹出来,只要手指一触摸屏幕,键盘就能消失,并且不会触发子控件的触摸事件.
0 0
- Fragment如何调用所在Activity的dispatchTouchEvent(MotionEvent ev)函数
- Fragment如何调用所在Activity的dispatchTouchEvent(MotionEvent ev)函数
- View的onInterceptTouchEvent(MotionEvent ev)和dispatchTouchEvent(MotionEvent ev) 解析
- Android 编程下 Touch 事件的分发和消费机制Android 中与 Touch 事件相关的方法包括:dispatchTouchEvent(MotionEvent ev)、onIntercep
- dispatchTouchEvent(),onTouchEvent(MotionEvent event),onInterceptTouchEvent(MotionEvent event)的事件处理
- Activity中重载的dispatchTouchEvent 和 onTouchEvent不被调用
- 在Fragment中如何调用指定Activity的方法
- Android viewGoup.dispatchTouchEvent(ev)源码
- Andriod fragment调用Activity函数方法
- Activity调用dispatchTouchEvent()和onTouchEvent()方法
- Android事件处理之View$dispatchTouchEvent(ev)
- Fragment中调用父Activity的方法
- Fragment调用Activity的onActivityResult方法
- Fragment怎么直接调用Activity的方法
- Fragment调用Activity
- Fragment 中调用 activity
- Fragment 调用Activity onKeyDown()
- Activity的事件处理:dispatchTouchEvent,onUserInteraction,onTouchEvent
- leetcode
- 欢迎使用CSDN-markdown编辑器
- 黑马程序员——函数
- Android中Listview的getChildAt()只能更新当前显示在屏幕上的Item的解决办法
- Android判断软键盘弹出并隐藏的简单完美解决方案
- Fragment如何调用所在Activity的dispatchTouchEvent(MotionEvent ev)函数
- Java内存回收机制(转)
- 有关appwidget的简单开发以及步骤
- 如何在iOS设备中进行缓存
- mapreduce中使用第三方jar包
- CUDA核函数share memory
- <C/C++算法>字符串匹配---KMP算法
- 第十二周第三天
- scheduleAtFixedRate 与 scheduleWithFixedDelay 区别