2012-12-08 27 views
4

我在Activity中有ListViewListView行是LinearLayout s每個包含兩個孩子View s,都是clickable。該結構是這樣的 -Android - 消費具有多個可點擊兒童的父視圖的onTouch

______________________________ 
|  |      | 
|______|_______________________| 

現在,我想保持這兩個項目clickable和檢測刷卡動作父View,即the LinearLayout

請問您可以給我建議什麼是最好的方法?

+1

看看'onInterceptTouchEvent'方法。 – Luksprog

+0

嗨。謝謝你的評論。這是否意味着我必須擴展'LinearLayout'並將其用作ListView行的容器? – jaibatrik

+0

是的,因爲您需要重寫該方法+ onTouch方法。 – Luksprog

回答

3

現在,我想保留這兩個項目的可點擊並檢測父視圖的滑動操作 ,即LinearLayout。

你可以創建自己的行View延伸LinearLayout和將包裹這兩個孩子的意見。爲此,請覆蓋onInterceptTouchEventonTouch方法來檢測滑動。如果您需要知道您當前正在刷什麼行,您可以讓自定義視圖記住它在列表中的位置,並更新適配器的getView方法中的位置。

我認爲,另一種選擇是在正常的行視圖頂部有一個覆蓋視圖,它將處理滑動。

1

在你BaseAdapter覆蓋getView,並得到每個孩子的引用,並設置onClickLister爲他們每個人,每次getView叫,採樣時間:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     if(convertView==null){ 
      convertView = inflater.inflate(R.layout.layout, parent,false); 
     } 

     final MyClass item = (MyClass)getItem(position); 

     View child1 = convertView.findViewById(R.id.child1); 
     child1.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Log.d("tag", "child1 from item "+ position +" , is clicked."); 

      } 
     }); 

     View child2 = convertView.findViewById(R.id.child2); 
     child2.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Log.d("tag", "child2 from item "+ position +" , is clicked."); 

      } 
     }); 

     return convertView;} 

和刷卡,擴展您的LinearLayout並覆蓋onInterceptTouchEvent在其中,並將其傳遞給GestureDetector並處理它。 有關GestureDetector和Swipe的更多信息,請查看Google的GestureDetectorSimpleOnGestureListener樣本。