在父類MainActivity中定義以下接口和函數java
[java] view plain copy print?web
public interface MyTouchListener { ide
public void onTouchEvent(MotionEvent event); 函數
} this
// 保存MyTouchListener接口的列表 spa
private ArrayList<MyTouchListener> myTouchListeners = new ArrayList<MainActivity.MyTouchListener>(); .net
/** orm
* 提供給Fragment經過getActivity()方法來註冊本身的觸摸事件的方法 對象
* @param listener blog
*/
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中
[java] view plain copy print?
@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;
}
這樣當有touchEvent發生時,MainActivity就會調用dispatchTouchEvent,dispatchTouchEvent接着對每個註冊的對象調用其onTouchEvent函數,也就是myTouchListener中實現的方法,這樣Fragment裏面就等於實現了onTouchEvent函數,只須要在函數體內實現處理的事件。