2019独角兽企业重金招聘Python工程师标准>>>
该方法分为两步,首先是在父类Activity中,构造一个回调接口,并向外提供注册和销毁该回调接口的方法。然后在Activity的dispatchTouchEvent函数中遍历所有注册了该回调接口的对象,分发onTouchEvent事件。
/**
* 回调接口
* @author zhaoxin5
*
*/
public interface MyTouchListener
{
public void onTouchEvent(MotionEvent event);
}
/*
* 保存MyTouchListener接口的列表
*/
private ArrayList
/**
* 提供给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);
但是会出现一个问题,就是在跳转到同一个activity的其他的fragment时,有可能仍这行当前方法