2010-06-01 154 views
25

我在我非常簡單的GridView中出現奇怪的滾動問題。網格中的每個項目只是一個ImageView和一個TextView。活動本身只是一個應用程序選擇器。它看起來像Android中基本App Tray的粗略版本。在Android中使用GridView滾動問題

問題是,在我的視圖中滾動了一段時間後,它將不可避免地讓我繼續滾動通過最上面的一排圖標到一個空白屏幕,並且滾動條會消失,從而使我卡住。

這不會發生每次去到視圖的頂部,只是偶爾,並且一般只在一些過多的滾動時間。

如果我碰巧注意到這個問題,並抓住它的頂行會消失在屏幕的底部之前,我通常能回到通過視圖滾動和發現一些圖標丟失。網格中有空白的空間,我只能假設這些圖標已經移動到了一些奇怪的位置,允許視圖滾動到頂部。

這是我的第一個Android應用程序超出了基本的Hello World,所以它可能是我剛剛搞砸了我的佈局文件的東西。我也意識到這可能是一個相當混亂的描述,所以我希望有人經歷過這個,我的搜索能力根本無法找到它。

如果有人認爲這很有用,我可以發佈我的佈局文件或其他代碼。

哦,並且程序是建立針對1.5,但2.2我的手機上(無論2.2的狀態,這是上週悄悄出)運行。我沒有足夠的應用程序在模擬器上測試它,但如果有人覺得有必要,可能會設置一些東西。

在此先感謝您對此問題的任何幫助。

+0

請發佈代碼1)您的活動/列表/項目佈局和2)您的適配器代碼 – 2011-04-27 20:49:07

+0

您可以解決,我遇到了這個問題 – pengwang 2011-05-10 01:45:34

回答

1

看來,如果您滾動出的GridView的底部,然後再返回速度非常快了幾次,你最終會發現,觀統領的元素移動一個地方,從他們最初是在「左」 。發生這種情況時,您可以一直滾動GridView的頂部。當你到達列表頂部時,項目0不顯示,項目1位於該位置,只有黑色位於該行之上。

點擊在這種情況下任何項目重置名單,一切都恢復正常。

這必須是一個錯誤。它具有很高的重現性,我不認爲我所做的任何事情都會導致混淆。此時,添加到列表適配器已停止。

現在我正在使用Android 2.3.3。

+0

「此時,添加到列表適配器已停止。」你能給我更詳細。我遇到這個問題http://stackoverflow.com/questions/5944250/gridview-cannot-show-image – pengwang 2011-05-10 01:44:28

7

我有同樣的問題,但我張貼到GridViewImageView是如此pengwang的回答對我沒有幫助。我發現這個錯誤的解釋https://code.google.com/p/android/issues/detail?id=16218

問題是,GridView目前不處理具有不同高度的項目。

我的解決方案是對所有GridView的項目使用完全指定的layout_height

+0

感謝這一個。奇怪的症狀。 – 2015-03-08 00:08:08

+0

謝謝,這幫助我解決了類似的問題。首先,我從'getView(final int position,View convertView,ViewGroup parent)'以編程方式添加一些'TextView'和'Button'然後我使用'getViewTreeObserver()。addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener(){ ...}'以獲得每行的最大高度最後,我使用最後一列的位置來設置每個孩子的高度,使用'viewGroup.getChildAt(position)'在每行的'View'中移動。 – ArtiomLK 2016-11-20 04:05:49

0

我剛剛遇到了這個完全相同的問題 - 我有一個網格圖像有不同的高度。閱讀的GridView,GridView.LayoutParams和網格佈局Android開發的文檔後,我做了兩件事情,解決我的問題:

  1. 找到每行中最高的圖像,並高度存儲在地圖一排 - > rowHeight的。我下載的每個圖像都有寬度和高度信息,所以通過覆蓋我的適配器的addAll(items)方法,我很容易做到這一點。我創建了一個GridView.LayoutParams(MATCH_PARENT,getRowHeight(position)),它將每個網格項目設置爲其特定行的最大行高度。

  2. 將我的ImageView包裹在LinearLayout中。我嘗試過其他佈局,但LinearLayout是可以工作的。爲圖像視圖設置android:scaleType =「fitCenter」和android:adjustViewBounds =「true」。

經過上述3個步驟,我終於得到了網格看起來不錯,他們有不同的高度,並沒有滾動的問題。