这个问题更多的是关于效率而不是任何错误,因为我已经用几种不同的方式构建了这个,但无法全面减少延迟,因为我尝试的每种策略都有其自身的缺点。
所以我的要求是我有一个 ListView,其中包含未知但可能非常大(数万)的数据量。当我提取数据时,我需要按传入项目发生的日期以及其所属游戏的变体对传入项目进行排序。例如。
List
List Item 1
Date header
Game 1
Item
Game 2
Item
Item
Item
List Item 2
Date Header
Game x
etc...
由于每个 ListItem 可以有不同数量的游戏,每个游戏的项目数量也不同,因此我无法(或尚未找到一种方法)使用适配器有效地重用 View 来创建平滑的滚动效果。
这就是我尝试过的:
膨胀容器布局,然后在调用其 getView() 方法时在适配器内膨胀/构建游戏。显然,每次调用时都会夸大变化,这会给系统带来沉重负担,并且即使数据量很小,也无法提供流畅的体验。但是,无论列表中的数据量有多少,波动性都非常一致。
在添加到 ListView 之前构建所有 View ,并让 Adapter 的 getView() 方法简单地返回预构建的 View 。这对于少量数据来说效果很好,但随着添加更多数据就开始变得困难。
我的问题是,我是否缺少更好的方法或优化任一策略的方法?
最佳答案
听起来你可能需要一种叫做“持有人模式”的东西。
这看起来是一个不错的教程:http://www.codeofaninja.com/2013/09/android-viewholder-pattern-example.html
沃盖拉在这里也触及了这个主题:http://www.vogella.com/tutorials/AndroidListView/article.html#adapterperformance_holder
为了避免滚动浏览所有列表,您还可以添加分页,像这个库这样的东西可能会有所帮助:https://github.com/nicolasjafelle/PagingListView
关于java - 具有许多不同 View 的 ListView 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23303089/