2010-10-06 151 views
2

我的ListActivity被绑定到一个ArrayAdapter,我已经覆盖了getView()方法。如果我在该方法中更改小部件的可见性或修改视图的背景颜色,那么一旦该修改后的列表项从屏幕滚动后返回,这些更改就会丢失。事实上,列表中的其他一些观点正在挑选变化。维护ListView项目状态

如何让修改过的视图在滚动后重新显示时看起来相同?

+0

您可能想要从getView()方法发布代码,以便我们可以更好地了解发生了什么。您是否在getView中检查数据的位置以设置和清除选择值?同样,视图也会在列表中重复使用,所以您还需要在getView方法中检查预先存在的视图,并相应地更改其状态。 – 2010-10-06 01:53:07

回答

3

你是否每次膨胀一个新视图或使用传入的convertView?

通常,适配器会尝试回收视图,只创建足以提供平滑滚动的视图。现有的再循环视图作为convertView传入。您可以每次膨胀并返回一个新视图(昂贵),或者只需根据位置重新设置convertView(如果存在)。如果回收您需要重新设置所有视图属性,因为不能保证您获得的回收视图与过去用于此位置的视图属性相同。

这听起来像你的错误是,你没有正确重新设置循环视图(convertView)的所有属性,以匹配当前位置的数据。