在Android中有效处理动态列表视图项

时间:2014-07-17 03:44:29

标签: android multithreading listview android-listview android-contacts

在我的应用程序中,我有一个名为“联系人”的按钮,允许用户选择要添加到其朋友列表的联系人。单击时,将向用户显示所有用户联系人的列表视图。每个列表视图行包含联系人显示名称,图标,电子邮件地址和按钮。名称,图标和电子邮件都是使用ContactsContract类获取的。

我遇到的问题是处理所有用户的联系人的计算成本非常高。

我尝试了两种解决方案:

  1. CursorAdapter中,我尝试修改bindView方法。我传入一个查询用户联系人的游标,在bindView方法中,我执行了对我的服务器的异步调用,以将联系人的关系返回给当前用户。即如果联系人安装了应用并且是朋友,该按钮将显示“删除”。此调用将确定按钮类型并设置相应的onClickListeners

    • 这不起作用,因为它会导致列表非常慢,不平滑,并且感觉非常迟钝。
  2. 我只是尝试在一些不同的线程中加载联系人和服务器查询。当它完成加载时,我会使用已在不同线程中确定的名称,图标,电子邮件和按钮类型初始化BaseAdapter

    • 这不起作用,因为加载联系人需要30到40秒。但是,装完后它会更顺畅。
  3. 如何解决此问题?

    我应该首先从服务器获取数据还是为适配器中的每个项目预加载数据?

    修改

    布局看起来与类似

    find-friends-layout

1 个答案:

答案 0 :(得分:0)

我要做的是加载联系人和远程数据,创建一个自定义类来保存它们,将它放在ArrayList<MyCustomContactClass>内,并且只有在它准备就绪之后我才会将adaptar加载到listview中