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函數,只須要在函數體內實現處理的事件。

相關文章
相關標籤/搜索