您的位置:首页 > 其它

Fragment中通过回调获得实现Activity中的onTouchEvent函数

2015-01-15 14:59 323 查看
该方法分为两步,首先是在父类Activity中,构造一个回调接口,并向外提供注册和销毁该回调接口的方法。然后在Activity的dispatchTouchEvent函数中遍历所有注册了该回调接口的对象,分发onTouchEvent事件。

 

/**

* 回调接口

* @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的事件分发的接收对象列表中。

 

/**

* 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);

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: