android Fragment中没有onTouchEvent解决方法

在父类MainActivity中定义以下接口和函数java

[java] view plain copy print?web

  1. public interface MyTouchListener {  ide

  2.     public void onTouchEvent(MotionEvent event);  函数

  3. }  this

  4.       

  5. // 保存MyTouchListener接口的列表  spa

  6. private ArrayList<MyTouchListener> myTouchListeners = new ArrayList<MainActivity.MyTouchListener>();  .net

  7.       

  8. /** orm

  9. * 提供给Fragment经过getActivity()方法来注册本身的触摸事件的方法 对象

  10. * @param listener blog

  11. */  

  12. public void registerMyTouchListener(MyTouchListener listener) {  

  13.      myTouchListeners.add(listener);  

  14. }  

  15.       

  16. /** 

  17. * 提供给Fragment经过getActivity()方法来取消注册本身的触摸事件的方法 

  18. * @param listener 

  19. */  

  20. public void unRegisterMyTouchListener(MyTouchListener listener) {  

  21.     myTouchListeners.remove( listener );  

  22. }  

  23.       

  24. /** 

  25. * 分发触摸事件给全部注册了MyTouchListener的接口 

  26. */  

  27. @Override  

  28. public boolean dispatchTouchEvent(MotionEvent ev) {   

  29.     for (MyTouchListener listener : myTouchListeners) {  

  30.     listener.onTouchEvent(ev);  

  31.     }  

  32.     return super.dispatchTouchEvent(ev);  

  33. }  

而后是在Fragment中

[java] view plain copy print?

  1. @Override  

  2. public View onCreateView(LayoutInflater inflater, ViewGroup container,  

  3.     Bundle savedInstanceState) {  

  4.     View rootView = inflater.inflate(R.layout.home_page, container,false);                                                                                                                                                                                                                                              /** 

  5.     * Fragment中,注册 

  6.     * 接收MainActivity的Touch回调的对象 

  7.     * 重写其中的onTouchEvent函数,并进行该Fragment的逻辑处理 

  8.     */  

  9.     MainActivity.MyTouchListener myTouchListener = new MainActivity.MyTouchListener() {  

  10.         @Override  

  11.         public void onTouchEvent(MotionEvent event) {  

  12.         // 处理手势事件  

  13.         }  

  14.     };  

  15.           

  16.     // 将myTouchListener注册到分发列表  

  17.    ((MainActivity)this.getActivity()).registerMyTouchListener(myTouchListener);                                                                                                                                                                                                                                         return rootView;  

  18. }  


这样当有touchEvent发生时,MainActivity就会调用dispatchTouchEvent,dispatchTouchEvent接着对每个注册的对象调用其onTouchEvent函数,也就是myTouchListener中实现的方法,这样Fragment里面就等于实现了onTouchEvent函数,只须要在函数体内实现处理的事件。

相关文章
相关标签/搜索