具有许多不同视图的java ListView适配器
这个问题更多的是关于效率,而不是任何错误,因为我用了几种不同的方法构建了这个模型,并没有能够全面减少滞后,因为我尝试的每种策略都有自己的缺点
所以我的要求是我有一个包含未知但可能非常大(数万)数据量的ListView。当我提取数据时,我需要根据数据发生的日期以及它所参与的游戏的变化对传入的项目进行排序。例如
List
List Item 1
Date header
Game 1
Item
Game 2
Item
Item
Item
List Item 2
Date Header
Game x
etc...
由于每个ListItem可以有不同数量的游戏,每个游戏的项目数量也不同,因此我无法(或尚未找到一种方法)使用适配器高效地重用视图以创建平滑的滚动效果
以下是我尝试过的:
膨胀容器布局,然后在调用其getView()方法时在适配器内膨胀/构建游戏。显然,每次调用它时都会增加变化,这对系统来说是一个沉重的负担,即使数据量很小,也无法带来平稳的体验。然而,无论列表中的数据量如何,波动性都是相当一致的
在添加到ListView之前构建所有视图,并让适配器的getView()方法简单地返回预构建的视图。这在数据量较小的情况下效果很好,但随着更多数据的添加,它开始陷入困境
我的问题是,有没有更好的方法我错过了,或者有一种方法可以优化这两种策略
# 1 楼答案
听起来你可能需要一种叫做持有者模式的东西
这看起来像一个不错的教程: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