fragment實現ontouchevent

該方法分爲兩步,首先是在父類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

相關文章
相關標籤/搜索