android - GridView项有时显示错误的可绘制对象

标签 android gridview

我已经实现了基于this tutorial的GridView。除非打开搜索对话框或旋转屏幕然后四处滚动,否则效果很好。

当出现搜索对话框和虚拟键盘时,我的每个网格项目的可绘制对象都会移动。我可以单击它们,它们会按预期执行操作,但drawable错误。

当我进入横向模式并四处滚动时,会发生相同的问题。如果我再次向下,向上,向下滚动,则可绘制对象会被拖曳。

为了更好地说明,假设我有三个对象,每个对象都有一个图像。


Obj A显示一个苹果
Obj B显示了一个香蕉
Obj C显示哈密瓜


当发生转变时,我最终得到:


Obj A显示哈密瓜
Obj B显示了一个香蕉
Obj C显示一个苹果


两种原因(搜索对话框和屏幕旋转n'滚动)之间的问题不一致,但是每种原因本身都是一致的。反复滚动显示一个模式,就像出现搜索对话框一样。我该如何阻止这种情况的发生?

最佳答案

您链接到的源代码有缺陷。

如代码所示,当布局在getView()中膨胀时,您不能只设置文本和图像。您需要每次设置文本和图像,无论是用于新夸张的布局还是要通过convertView回收的布局。

关键在于术语“回收”。如果convertView不是null,则表示您要夸大一些现有的View,Android希望您根据提供的位置重新填充新数据。链接到的代码将忽略该部分。

我的其中一本有关适配器适配器回收概念的书中的Here is an excerpt。虽然摘录集中在ListView上,但该技术与GridView相同。

关于android - GridView项有时显示错误的可绘制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2936447/

相关文章:

java - 如何以特定的项目点击次数翻转 GridView 中的所有项目

asp.net - 在asp.net中显示按月和年分组的记录

java - 如何在android本地数据库中存储intent?

java - 数据绑定(bind)和 Google 服务插件无法协同工作

Android获取SimpleOnGestureListener里面的view

android - 如何在 Windows 中轻松查看和过滤 Android 的 logcat?

java - 如何使一个 ImageView 在按下另一个 ImageView 时消失?

c# - 以编程方式添加按钮列

c# - GridView 固定标题

c# - Gridview 绑定(bind)到数据表编辑下拉列表 C#