2012-01-31 42 views
4

我有一個滾動型 - >表=>的TableRow,我動態地添加行,每行有一個的LinearLayout裏面它,我附上OnTouchListener來,然後當它觸動我做一些事情。至少這是計劃,我遇到的問題是當你滾動ScrollView時,即使滾動它也會觸發這些事件。這種類型的行爲不會發生在我有ScrollView中的其他控件,如按鈕,ImageButtons,EditTextScrollView在滾動時忽略OnTouch?

我的問題是如何讓LinearLayout忽略這些OnTouch事件,而滾動視圖滾動像按鈕和EditText字段呢?

回答

5

裏面你onTouch事件回調if語句或case塊添加到該檢查

(me.getAction == MotionEvent.ACTION_CANCEL)與此類似:

else if (me.getAction() == MotionEvent.ACTION_CANCEL){ 
       Log.i(myTag, "Action Cancel"); 

       //This means we are scrolling on the list, not trying to press 


} 

,因爲我的工作就可以了這是一個很長一段時間,但我知道我必須在某一時刻解決這個問題,並且在剛剛看了一眼之後,我認爲這是我爲了讓它工作而必須做的。在列表滾動時,它將繼續接收回調,但對它們的操作應取消。所以,如果你設置了某種如果,或開關/來檢查action_cancel和什麼也不做,當它是真實的情況下,從用戶的角度來看,onTouch將「忽略」,而滾動所發生的事件。

+1

似乎不起作用添,行動只有一個價值和它的遞減或遞增,它似乎永遠不會有痛苦後,測試了近100種不同的方式方法來取消它的價值... – emalamisura 2012-02-01 01:46:38

+1

哇,好不好做到這一點,你必須調用setClickable(真)之前,你會得到取消和移動事件,否則你得到的是下/上 – emalamisura 2012-02-01 02:21:01

+1

我想我的經驗加入到這一點,觸摸事件進來唐氏 - >取消 - >移動,如果調用Cancel,Android會自動取消Up事件。如果你需要突出顯示下來的東西,然後不注意並採取行動,這是有問題的。我通過在100 ms內使用Handler延遲以及在Up中使用150 ms Handler延遲來解決此問題。這種方式絕對不會改變用戶如果觸摸這些項目和滾動,如果他們持有一個項目,你會得到但沒有取消,以解決我也不高興沒有延遲。 – emalamisura 2012-02-01 14:37:39