2010-06-01 47 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个步骤,我终于得到了网格看起来不错,他们有不同的高度,并没有滚动的问题。