Android ListView、联系人和自己的数据表

Android ListView、联系人和自己的数据表,android,listview,Android,Listview,目前,我正在取出所有联系人并将其显示在列表视图中。接下来,对于列表中的每个联系人,我使用自己的表进行检查,如果他是注册用户,则显示一个图标。到目前为止,我已经尝试了以下方法: 1) 在适配器的getView()中,对于每一行,我都通过传入联系人id来调用自己表上的查询。这样会减慢ListView的滚动速度,并且可能会遇到内存问题 2) 在getView()中,对于每一行,我将联系人id和图像视图添加到一个队列中,该队列逐个查询并显示图标。这种分类是可行的,但有时显示会变得怪异,随机显示图标,然后

目前,我正在取出所有联系人并将其显示在列表视图中。接下来,对于列表中的每个联系人,我使用自己的表进行检查,如果他是注册用户,则显示一个图标。到目前为止,我已经尝试了以下方法:

1) 在适配器的getView()中,对于每一行,我都通过传入联系人id来调用自己表上的查询。这样会减慢ListView的滚动速度,并且可能会遇到内存问题

2) 在getView()中,对于每一行,我将联系人id和图像视图添加到一个队列中,该队列逐个查询并显示图标。这种分类是可行的,但有时显示会变得怪异,随机显示图标,然后消失

3) 我使用了MatrixCursor并尝试加入数据,但第1步中的查询也被调用,因此再次减慢了显示速度


任何人都可以发表评论或提出更好的建议,那就太好了!谢谢。

查看谷歌IO视频在listview上的性能:

基本上,您需要做两件事:

  • 实现您自己的游标适配器,它保存数据并将其作为标记附加到项目。这将大大加快滚动速度,只需查找一次数据。否则,每次项目进入视图时,您都会点击表格。安卓操作系统在处理物品方面表现出攻击性。。这称为viewholder模式,请看这里讨论的内容:我没有找到更好的示例,但您有一个想法

  • 我会将数据库中的项目缓存到列表中,这样您就不必查询每个项目


  • 我实际上做了1和2,想知道是否有更好的方法?我在想,是否有可能以某种方式将联系人和我的表的数据连接在一起,以生成一个游标,从而使检查更容易、更快。查找每个记录的属性时,最有可能会减慢速度。我怀疑您是否可以加入数据,因为您使用ContentProvider,但您可以将联系人中的数据同步到您的数据库中,然后从您自己的数据库中查找所有内容。但我认为这将是最后的手段。如果你的数据“方便”,并且每次通话时都不去数据库,那应该是相当快的。到目前为止,我一直面临着“方便”的问题……哦,好吧,无论如何,谢谢你,我会坚持访问数据库,直到我能想到什么。