我有一个ListView和一个SimpleCursorAdapter子类,它显示来自SQLite数据库的数据。我已经定制了我的适配器,当我点击一个listitem时,它会展开/折叠以显示更多细节。一切都很好,但我发现了一种使用不必要处理的奇怪行为。
假设我的列表中有200个项目,所有这些项目都处于折叠状态(这只是意味着其中的一些TextViews具有visibility =“gone”)。现在我将列表向下滚动到项目编号100.为每个项目调用bindView(),其中_id = 1,_id = 2,...,_id = 99,_id = 100。现在我单击项目100并展开它(将其中的一些TextView更改为visibility =“visible”)。人们会期望为_id = 100调用bindView(),也许还有一些周围的项目,如_id = 98,_id = 99,_id = 101,_id = 102,因为需要重新绘制ListView。但是这里有一个奇怪的部分 - bindView()被调用_id = 1,_id = 2,_id = 3,_id = 4(当然这些都是屏幕外的)。这不是全部 - 它执行了两次,所以我们对ListView中的前4个项目进行了8次bindView()调用,这些调用并不接近显示在屏幕上。周围的项目没有得到bindView()调用,甚至没有项目编号100得到一个!
由于一切正常,我应该忍受这个,但我真的好奇为什么这种奇怪的行为正在发生。有人有任何想法吗?