关于多次调用getView的问题和所有答案我都看过了。但是,我没有找到解决我的问题的方法。
我有一个列表,其中的行有两种状态:已读或未读。好吧,我想让第一次看到的项目有不同的颜色,当我滚动列表时,它们将颜色更改为“阅读状态”。
为了做到这一点,我在我的适配器的 getView 方法中设置了一个字段 isRead,当该项目的行被绘制时。但问题如下:由于方法 getView 被多次调用,字段被标记为已读,当列表显示在屏幕上时,它看起来好像已经被读取了。
有解决这个问题的想法吗?
谢谢
最佳答案
我假设您指的是 getView 多次请求相同 View 的问题。
ListView 这样做是因为它需要为不同的原因(滚动条大小、布局等)获取 View 的度量值
通常可以通过不在 ListView 上使用“wrap_content”属性来避免此问题。
除此之外,使用 getView 来确定 View 是否已显示只是一个坏主意。 ListView 有许多优化会扰乱为每一行调用 getView 的顺序,因此无法知道会发生什么,您的应用程序将开始显示奇怪的行为。
尽量避免 View 和数据之间的任何关系,除了 View 作为数据显示的概念之外。
相反,让您的列表 Activity 中的一些工作线程或事件监听器监视已向用户显示列表中的项目的列表,更新数据,并在您的适配器上调用 dataSetChanged。
关于Android Adapter 多个getView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3196219/