2014-01-08 57 views
1

我有一個簡單的佈局:ListView的父視圖無法攔截觸摸事件

<CustomFrameLayout> 
    <ListView /> 
</CustomFrameLayout> 

在我CustomFrameLayout,我重寫:

onInterceptTouchEvent(MotionEvent event); 

,並返回false。在滾動ListView時,onInterceptTouchEvent會收到ACTION_DOWN和第一個ACTION_MOVE事件。然後,ListView似乎接管並且onInterceptTouchEvent無法接收以下ACTION_MOVE事件。

這違背了什麼文檔指出:

因爲只要你從這個函數返回假的,每個下面的事件(直至幷包括最終向上)將首先在這裏,然後被輸送到目標的onTouchEvent()。

http://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent(android.view.MotionEvent)

我已經調查,要求觸摸事件不是在ListView的水平被截獲。

requestDisallowInterceptTouchEvent(boolean disallowIntercept) 

這似乎沒有任何效果。我應該在ListView單元視圖中調用它嗎?還有什麼我失蹤?我正在測試Android 4.4

謝謝。

回答

0

我已決定重寫此方法,而不是。在這裏,我可以保證我可以攔截所有觸摸事件,然後將其分發給子視圖並且可能被子視圖消費。

dispatchTouchEvents(MotionEvent event); 
+0

你能發送代碼示例嗎? – eyal

1

你應該onInterceptTouchEvent(MotionEvent event);

true返回true表明您願意接受進一步的觸控式false表明你在哪裏沒有興趣進一步行動的行動......

+0

這將阻止ListView接收事件。我只想聽取事件而不消耗它們。因此我需要返回false。從onInterceptTouchEvent的文檔中讀取第3點。 – mdupls

+0

然後你可以從你的CustomFrameLayout手動調度觸摸事件到ListView ... –

+0

這是一個選項。我很樂觀,認爲還有別的可以做的事情或者我錯過的東西。我已經更新了這個問題,以包括文檔的內容。我想要的行爲在文檔中明確說明。 – mdupls

相關問題