我正在使用聯繫人提供程序獲取所有電話號碼和姓名,並將其顯示在列表視圖中。如何在列表視圖中顯示手機通訊錄
在我的手機中有近4500個聯繫人。
加載所有姓名和電話號碼需要將近2-3分鐘。
任何建議如何減少加載時間
感謝 Ajeet
我正在使用聯繫人提供程序獲取所有電話號碼和姓名,並將其顯示在列表視圖中。如何在列表視圖中顯示手機通訊錄
在我的手機中有近4500個聯繫人。
加載所有姓名和電話號碼需要將近2-3分鐘。
任何建議如何減少加載時間
感謝 Ajeet
您可以使用content provider這個
ListAdapter list;
list=readContacts();
ListView lv=(ListView) findViewById(R.id.listView1);
lv.setAdapter(list);
而且readContacts()
是
public ListAdapter readContacts(){
ContentResolver cr = getContentResolver();
ListAdapter cd = new ArrayList<Contact_getActivity>();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, ContactsContract.Contacts.DISPLAY_NAME);
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
// get the phone number
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
new String[]{id}, null);
while (pCur.moveToNext()) {
String phone = pCur.getString(
pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
// if (!Utils.isEmpty(phone)) {
// cd.add(new ContactData(id, name, phone));
// }
}
pCur.close();
}
}
}
return cd;
}
順便說一句我建議在用戶單擊後,在不同的視圖中爲聯繫人加載其他信息。我嘗試過嵌套的內容提供者查詢,即使沒有那麼多的聯繫人,他們的速度也非常慢 – 2013-04-24 11:56:42
我知道這不是廣告直接回答您的問題,但您可以加載一定數量的聯繫人,將其顯示在列表中,然後在後臺加載其餘聯繫人thread
。當用戶使用例如20
聯繫人滾動到列表的末尾時,可以添加新加載的20
聯繫人。我認爲這種技術被稱爲paging
但我不確定:)
一次只顯示幾個聯繫人(假設有100個聯繫人)。 當用戶向下滾動列表時,加載另一個100等等。 就像Facebook的新功能。 它會一次加載幾條新聞,並在您向下滾動時加載另一條新聞。
根據我這是優化您的應用程序的最佳選擇。
不要加載'PO到POJO使用CursorAdapter ... – Selvin 2013-04-24 11:47:38