1

私は問題を抱えており、現時点では解決策がわかりません。誰かが私の問題で私を助けてくれることを願っています.

ユーザーがどの連絡先を設定に追加したいかを確認できるようにしたい。特定の連絡先に SMS を送信するには、プリファレンスが必要です。次のように xml でMultiSelectListPreferenceを初期化します。

<MultiSelectListPreference 
     android:key="sourcecontacts"
     android:entries="@array/contacts"
     android:entryValues="@array/contacts"
     android:title="@string/source_contact" 
     />

私のアクティビティには、MultiSelectListPreferenceがクリックされた場合にメソッド manageContacts ()を呼び出すOnPreferenceClickListener があります。

このメソッドでは、デバイスの連絡先を読み取り、それらを MultiSelectListPreference に入れ、ユーザーがそれらの連絡先をマークできるようにします。これは SharedPrefs に挿入する必要があります。

今私の問題は、エントリを ListPreference に追加することですが、UI ではエントリが表示されないことです。

ビューまたはコンポーネントをリロードする必要がありますか?

役立つ回答をお待ちしております。

以下に、私の manageContact メソッドを示します。

private void manageContacts() {
    if (entryValues == null || entries == null || entries.length <= 1
        || entryValues.length <= 1) {
        Cursor contacts = getContentResolver().query(Contacts.CONTENT_URI,
            null, null, null, Contacts.DISPLAY_NAME);
        startManagingCursor(contacts);
        entryValues = new CharSequence[contacts.getCount()];
        entries = new CharSequence[contacts.getCount()];
        int ix = 0;
        Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
        Cursor cursor = getContentResolver().query(
            uri,
            new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER,
                    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                    ContactsContract.CommonDataKinds.Phone._ID }, null,
            null,
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
        cursor.moveToFirst();
        while (cursor.isAfterLast() == false) {
            String contactNumber = cursor
                .getString(cursor.getColumnIndex(
                    ContactsContract.CommonDataKinds.Phone.NUMBER));
            String contactName = cursor
                .getString(cursor.getColumnIndex(
                    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            if (contactNumber != null && !contactNumber.isEmpty()) {
                entries[ix] = contactName;
                entryValues[ix] = contactNumber;
                ix++;
            }
            cursor.moveToNext();
        }
        cursor.close();
        cursor = null;
    }
    MultiSelectListPreference sourceContacts = (MultiSelectListPreference)
            getPreferenceScreen().findPreference("sourcecontacts");
    MultiSelectListPreference targetContacts = (MultiSelectListPreference)
            getPreferenceScreen().findPreference("targetcontacts");
    if (entries != null && entryValues != null && entries.length >= 1
        && entryValues.length >= 1) {
        sourceContacts.setSelectable(true);
        targetContacts.setSelectable(true);
        sourceContacts.setEntries(entries);
        sourceContacts.setEntryValues(entryValues);
        targetContacts.setEntries(entries);
        targetContacts.setEntryValues(entryValues);
    } else {
        sourceContacts.setSelectable(false);
        targetContacts.setSelectable(false);
    }
}
4

0 に答える 0