これは単純な使用例のようですが、これを行う方法を理解できません。 Androidの電話のすべての連絡先をすべての電話番号とともに取得したいと思います。 さんが言ってみましょう自分の電話番号と一緒に自分の携帯電話に連絡先のリストを以下に示します。CursorLoaderを使用して複数の電話番号の連絡先を表示
A - 1111(モバイル)、2222(ホーム)、3333(作業)
B - 4444(モバイル)、5555 (ホーム)
Cから6666(モバイル)、7777(ホーム)、8888(作業)
私は、次の方法で連絡先を表示したいがCursorLoaderを使用。私が試してみました
もの:
- 時にすべての連絡先や自分の電話番号を取得し、カスタムの連絡先オブジェクトの配列リストに保存して、リストを表示するためにそれらを使用しますRecyclerView。
- この問題は、電話番号が多い場合、この画面に再度アクセスすると、リソースが空きでないかメモリリークの問題が原因で空の画面が表示されることがあります。
StackOverflowのはそうここにあるコードを正しくインデントしません。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);
- はContactsContract.Contacts.CONTENT_URIを照会することによりCursorLoaderとCursorAdapterを使用して、すべての連絡先を入手IDとDISPLAY_NAME_PRIMARYを取得します。 getView()メソッドでは、最初のカーソルが私に与えた連絡先の詳細を呼び出すために、2番目のCursorLoaderを初期化できると考えました。
ユーザーに複数の連絡先がある場合は、ラジオボタンの一覧を表示し、そうでない場合は、唯一の番号のテキストビューを表示します。
私のコードはここにある:https://bitbucket.org/soulpatch/contactlistdemo/src/7c49c1e79fbbd7da90630c8967ae6daffa4efd72/?at=first_draft
これは、事前に電話番号をロードし、後でビューを更新しないように思われます。遅延や何かがわからないからです。 誰かがこれを手伝ってくれますか? チェック
getViewでカーソルの読み込みを実際に避ける必要があります。これは一部のデバイスにとって恐ろしいパフォーマンスをもたらします。悪いスクロールパフォーマンス。私は時間があれば明日より単純なソリューションを投稿します – marmor
はい私は同意し、古い電話機のいくつかをスクロールしながらパフォーマンスの問題を見ていますが、カーソルをgetViewで読み込まないようにすべきだと言ったら、 2番目の部分で_IDフィールドを検索し、連絡先のすべての電話番号を取得しますか?または、リストビューのCustomAdapterでカーソルローダーを使用しないでください。 Androidの開発者ページの例では、カーソルを使用して連絡先名をロードし、2番目のカーソルを使用してonClickの詳細を取得するためです。古いデバイスのスクロールをスムーズにするために、より良い方法を提案できると嬉しいです。 – LeoNeo