在父类MainActivity中定义如下接口和函数
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) {
for (MyTouchListener listener : myTouchListeners) {
listener.onTouchEvent(ev);
}
return super.dispatchTouchEvent(ev);
}
然后是在Fragment中
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.home_page, container,false); /**
* Fragment中,注册
* 接收MainActivity的Touch回调的对象
* 重写其中的onTouchEvent函数,并进行该Fragment的逻辑处理
*/
MainActivity.MyTouchListener myTouchListener = new MainActivity.MyTouchListener() {
@Override
public void onTouchEvent(MotionEvent event) {
// 处理手势事件
}
};
// 将myTouchListener注册到分发列表
((MainActivity)this.getActivity()).registerMyTouchListener(myTouchListener); return rootView;
}