2010-10-30 91 views
9

我已經幾天試圖解決這件事情的,但我不能弄明白。問題是,簡單的活動,簡單的佈局,ScrollView - > LinearLayout - >和佈局內的很多按鈕(在滾動內容中)。一切正常,但一件棘手的事情。當我點擊一個按鈕時,讓我們說滾動內容的頂部,並立即向下滾動到內容的底部,然後點擊另一個按鈕,沒有任何反應,直到我再次點擊,一切都恢復正常。這可以隨時複製,並且它獨立於代碼(我嘗試了20多種場景)。我還沒有太多的Android經驗,但看起來像滾動監聽器停止onClick監聽器或類似的東西。任何幫助,將不勝感激。先謝謝你。滾動型裏面的按鈕,直到第二次點擊無反應上的任何按鈕裏面

PD。如果我以編程方式執行scrollTo(),而不是用手指進行手動滾動,則一切正常,點擊響應。這簡直令我難以置信。

+0

@esenian:創建一個演示該問題的示例項目。將該項目上傳到某處(例如,作爲ZIP文件)。發佈一個鏈接到這裏,在@CommonsWare前綴的評論中,所以我知道你發佈了它。 – CommonsWare 2010-10-31 07:57:28

+0

@CommonsWare我已經在這裏上傳了一個項目http://www.megaupload.com/?d=U69RRBAW真的很簡單,佈局,沒有行動,只需按下按鈕1,滾動並按下按鈕14.你會明白我的意思(直到第二次點擊按鈕上沒有橙色框)。非常感謝您的寶貴時間。 – esenian 2010-10-31 12:27:38

+0

@esenian:MegaUpload說該文件不可用。也許通過編輯您的問題或者使用http://gist.github.com或類似的「pastebin」服務,發佈您的Activity類Java源代碼和佈局XML文件(如果有的話)就足夠了。 – CommonsWare 2010-10-31 13:58:01

回答

2

一切正常。

當你開始滾動,在ScrollView會聲稱觸摸事件,直到你停止觸摸屏幕一會兒。在Android 2.2中,您會知道何時滾動被視爲完成,因爲右側的滾動條會消失。

+0

好吧,我明白你的意思。所以我認爲沒有選擇來縮短時間,而滾動視圖一旦停止滾動就會觸發事件(在視覺上)...?我知道這不是很多時間,也許是0.5秒,但基本上不會。如果有一種方式,它會很棒。無論如何非常感謝你的回答。 – esenian 2010-10-31 18:09:13

+0

@esenian:「所以我認爲沒有減少時間的選擇,而滾動視圖一旦停止滾動就會觸發事件(以視覺形式)...?」 - 我並不知道。請記住,'Buttons'列表中的'ScrollView'不是您將看到許多生產應用程序使用的技術。 – CommonsWare 2010-10-31 18:19:57

+0

當然,你是對的,再次感謝你,我認爲這是從谷歌新的YouTube應用程序的方法。它似乎有一個horizo​​ntalscrollview模擬「滾動標籤」按鈕填充。我已經使它工作,看起來幾乎相同,但點擊滯後的問題令人討厭。現在我發現應用程序本身也具有相同的laggy行爲,所以我的方法必須非常接近。我認爲這很好。我會嘗試查看scrollview代碼,看看我是否可以重寫這次的控件。真的非常感謝你。 – esenian 2010-10-31 19:09:35

3

我有同樣的問題。 我不同意這是一個衰落的滾動條問題。如果你禁用衰落,同樣的事情發生。

試了幾種方法中的themes.xml:

<item name="android:scrollbarDefaultDelayBeforeFade">100</item> 
<item name="android:scrollbarFadeDuration">100</item> 
<item name="android:fadeScrollbars">true</item> 

但沒有任何幫助。 看來,這是一個系統事物與scrollViews。 這可能幫忙看看這是怎麼回事:

setOnScrollListener(new OnScrollListener(){ 
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
     // TODO Auto-generated method stub 
    } 
    public void onScrollStateChanged(AbsListView view, int scrollState) { 
     // TODO Auto-generated method stub 
     if(scrollState == 0) Log.i("a", "scrolling stopped..."); 
    } 
    }); 
} 

但是,(可惜)不解決問題的幫助 - 而是解釋它。

注:如果您使用滾動型這只是發生。 ListView沒有這個問題。

任何人有另一種想法?

+0

也許你已經找到了解決方案?它看起來像是與滾動加速相關的(即使滾動在頂部/底部立即停止,較大的滑動動作也會導致較長的延遲),但我不知道如何解決該問題。 – sniurkst 2011-01-03 22:31:42

0

我已經能夠通過重寫onScrollChanged,然後通過發送的onTouchEvent的滾動型MotionEvent當界限達到模擬用戶觸摸來解決這個問題。

這是hackiest,我能想象最骯髒的節目,但它在我的應用程序工作正常。這個應用程序僅適用於運行2.2的手機,並且需要以某種方式解決此錯誤。

如果有人有更好的解決方案,請讓我知道。

編輯:此問題僅在2.2順便說一句,他們已經在2.3固定它,這不是一個問題2.1。

1

我有這樣的情況。我有一個ExpandableListView,它只是表現正常。當我將手機旋轉到水平位置並向後旋轉時,一組ExpandableListView中的某些項目將不會響應點擊事件。除非我滾動列表視圖,或者單擊這些項目的組項目,否則該事件將分派到之前單擊的項目,並正確執行點擊偵聽器代碼。

這發生在android 2.3和4.0 ...