具有许多不同视图的ListView适配器

时间:2014-04-25 21:09:16

标签: java android performance

这个问题更多的是关于效率而不是任何错误,因为我已经建立了几种不同的方式,并且无法减少所有的延迟,因为我尝试的每种策略都有其自身的缺点。

所以我的要求是我有一个ListView,其中包含未知但可能非常大(数万)的数据量。当我输入数据时,我需要在它出现的那一天对传入的项目进行排序,以及它所属的游戏的变化。例如

List
    List Item 1
        Date header
        Game 1
            Item
        Game 2
            Item
            Item
            Item
    List Item 2
        Date Header
        Game x 
etc...

由于每个ListItem可以有不同数量的游戏,每个游戏的项目数量不同,我不能(或者还没有找到办法)使用适配器有效地重复使用视图来创建平滑的滚动效果。 / p>

所以这就是我尝试过的:

  1. 膨胀容器布局,然后在调用其getView()方法时在适配器内膨胀/构建游戏。每次调用变量时,显然会使变量膨胀,并且即使数据量很小,也不能实现流畅的体验。但是,无论列表中的数据量如何,都会出现波动。

  2. 在添加到ListView之前构建所有视图,并让Adapter的getView()方法只返回预构建的View。这对于较少量的数据非常有效,但随着更多数据的添加开始陷入困境。

  3. 我的问题是,是否有更好的方法我缺少或优化任何一种策略?

1 个答案:

答案 0 :(得分:0)

听起来你可能需要一种名为Holder Pattern的东西。

这看起来很棒:http://www.codeofaninja.com/2013/09/android-viewholder-pattern-example.html

Vogella也在这里触及了这个主题:http://www.vogella.com/tutorials/AndroidListView/article.html#adapterperformance_holder

为了避免必须启用滚动浏览所有列表,您还可以添加pagnation,这个库可能会有所帮助:https://github.com/nicolasjafelle/PagingListView