您的位置:首页 > 其它

【转载】Fragment中通过回调获得实现Activity中的onTouchEvent函数

2015-12-14 13:42 337 查看
摘要:本文介绍如何通过回调函数来实现Fragment获得其所属的父类Activity中的onTouchEvent函数,并进行相应处理

该方法分为两步,首先是在父类Activity中,构造一个回调接口,并向外提供注册和销毁该回调接口的方法。然后在Activity的dispatchTouchEvent函数中遍历所有注册了该回调接口的对象,分发onTouchEvent事件。

/**

* 回调接口

* @author zhaoxin5

*

*/

public interface MyTouchListener

{

public void onTouchEvent(MotionEvent event);

}

/*

* 保存MyTouchListener接口的列表

*/

private ArrayList<MyTouchListener> myTouchListeners = new ArrayList<MainActivity.MyTouchListener>();

/**

* 提供给Fragment通过getActivity()方法来注册自己的触摸事件的方法

* @param listener

*/

public void registerMyTouchListener(MyTouchListener listener)

{

myTouchListeners.add( listener );

}

/**

* 提供给Fragment通过getActivity()方法来取消注册自己的触摸事件的方法

* @param listener

*/

public void unRegisterMyTouchListener(MyTouchListener listener)

{

myTouchListeners.remove( listener );

}

/**

* 分发触摸事件给所有注册了MyTouchListener的接口

*/

@Override

public boolean dispatchTouchEvent(MotionEvent ev) {

// TODO Auto-generated method stub

for (MyTouchListener listener : myTouchListeners) {

listener.onTouchEvent(ev);

}

return super.dispatchTouchEvent(ev);

}

复制代码
然后是在Fragment中的处理,首先需要声明一个父类Activity中的回调接口的对象,然后实现该回调接口中的onTouchEvent方法。并加上自己的处理。同时需要在该Fragment的初始化函数中,调用父类Activity的registerMyTouchListener函数来注册自己声明的父类Activity中的回调接口的对象,以便把自己加入到父类Activity的事件分发的接收对象列表中。

/**

* Fragment中,注册

* 接收MainActivity的Touch回调的对象

* 重写其中的onTouchEvent函数,并进行该Fragment的逻辑处理

*/

private MainActivity.MyTouchListener mTouchListener = new MyTouchListener() {

@Override

public void onTouchEvent(MotionEvent event) {

// TODO Auto-generated method stub

if(event.getAction() == MotionEvent.ACTION_UP){

//逻辑处理

}

}

};

//在该Fragment的构造函数中注册mTouchListener的回调

((MainActivity)this.getActivity()).registerMyTouchListener(mTouchListener);

复制代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: