文档章节

Android Fragment中监听事件

xunfang
 xunfang
发布于 2016/03/01 16:51
字数 267
阅读 71
收藏 0

 问题:

Fragment中没有提供监听touch事件的方法。

解决方案:

Activity中能够监听touch事件。

于是在Activity中写一个接口,MyOnTouchListener,在需要监听touch事件的fragment中实现这个窗口。

在Activity中实现如下方法:

[java] view plain copy
在CODE上查看代码片派生到我的代码片

    /**
    * 以下的几个方法用来,让fragment能够监听touch事件
    */  
    private ArrayList<MyOnTouchListener> onTouchListeners = new ArrayList<MyOnTouchListener>(  
    10);  
      
    @Override  
    public boolean dispatchTouchEvent(MotionEvent ev) {  
    for (MyOnTouchListener listener : onTouchListeners) {  
    listener.onTouch(ev);  
    }  
    return super.dispatchTouchEvent(ev);  
    }  
      
    public void registerMyOnTouchListener(MyOnTouchListener myOnTouchListener) {  
    onTouchListeners.add(myOnTouchListener);  
    }  
      
    public void unregisterMyOnTouchListener(MyOnTouchListener myOnTouchListener) {  
    onTouchListeners.remove(myOnTouchListener);  
    }  
      
    public interface MyOnTouchListener {  
    public boolean onTouch(MotionEvent ev);  
    }  


dispatchTouchEvent 可以监听所有的关于屏幕的行为。。。。。



在Fragment中实现如下代码:
[java] view plain copy
在CODE上查看代码片派生到我的代码片

    private GestureDetector mGestureDetector;  
      
    MainActivity.MyOnTouchListener myOnTouchListener;  
      
    @Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container,  
    Bundle savedInstanceState) {  
      
    Log.e(TAG, "onCreateView");  
      
    View view = inflater.inflate(R.layout.fragment_contact, container,  
    false);  
    this.view = view;  
      
    mGestureDetector = new GestureDetector(getActivity(),  
    new SideIndexGestureListener());  
      
    listView = (ListView) view.findViewById(R.id.listview_contacts);  
    getDataFromSQLite();  
    spliceData();  
    showListView();  
      
    myOnTouchListener = new MainActivity.MyOnTouchListener() {  
      
    @Override  
    public boolean onTouch(MotionEvent ev) {  
    boolean result = mGestureDetector.onTouchEvent(ev);  
    return result;  
    }  
    };  
    ((MainActivity) getActivity())  
    .registerMyOnTouchListener(myOnTouchListener);  
      
    return view;  
    } 

本文转载自:http://blog.csdn.net/jdsjlzx/article/details/20695279

共有 人打赏支持
xunfang
粉丝 0
博文 51
码字总数 7950
作品 0
海淀
程序员
最简单直接碎片操作,动态增删改(1)

新建activity继承fragmentactivity 在布局文件中拖入一个layout,起个名字比如fragmentlayout 新建一个class,继承fragment 新建一个layout,在里面随便放几个控件 在fragment中创建onActiv...

postdep
2014/07/16
0
0
如何绑定页面生命周期(二)-基于Android Architecture Components的Lifecycle实现

上篇文章如何绑定页面生命周期(一)-Glide实现介绍了Glide实现生命周期感知的原理,这里我们再介绍基于Android Architecture Components的Lifecycle实现页面生命周期感知。 Lifecycle是And...

宇是我
07/29
0
0
Android零基础入门第87节:Fragment添加、删除、替换

前面一起学习了Fragment的创建和加载,以及其生命周期方法,那么接下来进一步来学习Fragment的具体使用,本期先来学习Fragment添加、删除、替换。 一、概述 在前面的学习中,特别是动态加载的...

鑫鱻
2017/11/08
0
0
Android官方架构组件之LiveData + ViewModel + Room 源码分析一

简单使用案例: MainActivity: MessageViewModel: 其中viewModel.getMessageObserver().observe(this, new Observer() ) 中的this即SupportActivity :LifecycleOwner SupportActivity im......

编程之乐
05/23
0
0
Andromeda:适用于多进程架构的组件通信框架(下)

  首先插播一条自己的广告——有些朋友可能都知道了,我最近创建了一个知识星球,在这里试了一周,发现私密圈子的效率果然比群要好很多,付费门槛过滤掉了大部分广告和没有意愿学习分享的人...

Android群英传
05/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

docker run 创建一个新的容器并运行一个命令

docker run常用命令 docker run :创建一个新的容器并运行一个命令 语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 1.OPTIONS说明 -t:为容器重新分配一个伪输入终端,通常与 -i 同时使...

lwenhao
28分钟前
1
0
安装Win出现无法创建新的分区也找不到现有的分区解决方案

无法创建新的分区也找不到现有的分区 ### 首先在安装界面按下 Shift+F10### 在出现的CMD界面输入: diskpart 进入磁盘管理工具diskpart### 可以输入 : list disk 查看磁盘列表l...

Kxvz
31分钟前
1
0
关于 @ngrx/Store 下 obj 的扩展问题

昨天做 task 的时候,遇到了一个问题。 TypeError: can't define property "x": "obj" is not extensible 而我的代码是 public txTiles: Array<TransactionFilterTile>; constructor(priv......

IrisHuang
32分钟前
1
0
presto内存管理及调优

内存池 Presto有三种内存池,分别为GENERAL_POOL、RESERVED_POOL、SYSTEM_POOL。这三个内存池占用的内存大小是由下面算法进行分配的: builder.put(RESERVED_POOL, new MemoryPool(RESERVED...

张欢19933
33分钟前
1
0
Mysql5.7服务版安装

步骤1: 勾选同意协议 步骤2:选择Server only模式 步骤3:选择安装目录 步骤4:执行文件 步骤5:端口号与用户配置 步骤6:选择标准系统用户 Finish后,安装完成。...

lyle_luo
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部