私は問題を抱えており、現時点では解決策がわかりません。誰かが私の問題で私を助けてくれることを願っています.
ユーザーがどの連絡先を設定に追加したいかを確認できるようにしたい。特定の連絡先に 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);
}
}