該方法分爲兩步,首先是在父類Activity中,構造一個回調接口,並向外提供註冊和銷燬該回調接口的方法。而後在Activity的dispatchTouchEvent函數中遍歷全部註冊了該回調接口的對象,分發onTouchEvent事件。ide
/**
* 回調接口
* @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的事件分發的接收對象列表中。this
/**
* 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);spa
可是會出現一個問題,就是在跳轉到同一個activity的其餘的fragment時,有可能仍這行當前方法
.net