2013-03-05 47 views
2

我想使用包含自定義視圖的ListView(併成功完成此操作)。 基本上這些自定義視圖是垂直滑塊,顯然與ListView的自然行爲相沖突。 我使用Adapter中的自定義視圖填充它,這些對Items, 上的觸摸有反應,但是一旦我將手指移動超過幾個像素,它就會滾動,而自定義View將不會接收到任何觸摸事件了。Android ListView,不是所有的觸摸事件

當我觸摸我自己的組件時,我怎樣才能(很好地)防止滾動ListView

我可以以某種方式禁用ListView選擇,只是轉發到物品的觸摸,但仍然使用滾動行爲?

預先感謝您。

回答

8

爲了防止列表視圖的滾動,你可以在觸摸聽者inplement如下

listView.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if(event.getAction()==MotionEvent.ACTION_MOVE) 
      { 
       return true; 
      } 
      return false; 
     } 
    }); 

希望它會工作,如果我們對你有用放棄投票

1

可以使用onInterceptTouchEvent()在你的根佈局(一個包含ListView,像FrameLayout)如發現here攔截所有觸摸事件。

你在那裏做什麼是捕捉運動事件(返回true當MotionEvent.ACTION_DOWN進來),捕獲以下事件onTouchEvent(),決定議案是否用於列表項或列表本身並相應分派的事件。

不要期望這很容易工作。理解運動事件的流程以及onInterceptTouchEvent()onTouchEvent()之間的交互是具有挑戰性的,並使其工作更加有效。但我相信這是解決您的問題的可行方法。