這看起來像是一個簡單的用例,但我無法找到一種方法來做到這一點。 我想要檢索Android手機中的所有聯繫人及其所有電話號碼。 比方說,下面是我的手機上的聯繫人與他們的電話號碼一起名單:使用CursorLoader顯示多個電話號碼的聯繫人
A - 1111(移動),2222(家),3333(工作)
乙 - 4444(移動),5555 (首頁)
ç - 6666(移動),7777(家),8888(工作)
我想顯示在下面的方式,但使用CursorLoader的聯繫人。
事情我已經嘗試:
- 獲取所有的聯繫人和電話號碼的時間和它們保存在自定義聯繫人對象的數組列表,並使用它們顯示在列表中一個RecyclerView。
- 問題是,如果有很多電話號碼,則重新訪問此屏幕會導致空白屏幕,可能是由於資源不是空閒或內存泄漏問題。
#1不會縮進的代碼可以正確所以在這裏,它是:https://pastebin.com/y9i5R5iN
final Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(contactListCursor.getLong(ContactsQuery.ID)));
Uri thisContactUri = ContactsContract.Contacts.lookupContact(context.getContentResolver(), uri);
final UserContact contact = new UserContact();
contact.setName(contactListCursor.getString(contactListCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)));
final ArrayList<PhoneType> multipleContacts = new ArrayList<>();
final Uri phoneNumUri = Uri.withAppendedPath(thisContactUri, ContactsContract.Contacts.Data.CONTENT_DIRECTORY);
final Cursor contactPhoneNumCursor = contentResolver.query(phoneNumUri, ContactPhoneQuery.PROJECTION, ContactPhoneQuery.SELECTION, null, null);
- 使用CursorLoader並通過查詢ContactsContract.Contacts.CONTENT_URI一個CursorAdapter獲取所有聯繫人並獲取ID和DISPLAY_NAME_PRIMARY。在getView()方法中,我認爲我可以初始化第二個CursorLoader以調用第一個光標給我的聯繫的詳細信息。像這樣:
如果用戶有多個聯繫人,然後顯示單選按鈕的列表,否則顯示一個文本視圖與他們唯一的數字。
這似乎預先加載的電話號碼,而不是稍後更新視圖。要麼是因爲有延遲或者我不確定。 有人可以幫助我這個。 檢查
您應該真的避免在getView上執行光標讀取,這會導致某些設備出現可怕的性能,滾動性能不佳。明天我會發佈一個更簡單的解決方案,如果我有時間 – marmor
是的我同意,而且我在一些舊手機中滾動時看到性能問題,但是當你說我應該避免在getView中讀取光標時,你的意思是我不應該這麼做第二部分我查找_ID字段並獲取聯繫人的所有電話號碼?或者你的意思是我不應該在listview上使用CustomAdapter的遊標加載器?因爲Android開發人員頁面上的示例使用遊標加載聯繫人姓名,並使用第二個遊標來獲取onClick中的詳細信息。如果您能夠提出更好的方法,我會很高興,因爲這可以使舊設備上的滾動更平滑。 – LeoNeo