連絡先からニックネームと SIP アドレスを照会しようとしています。私が直面している問題は、両方が DATA1 列に格納されていることです。したがって、クエリを実行すると、ニックネームのみが取得されます。それらの両方を取得してSimpleCursorAdapter
以下に渡す方法は何ですか?
CursorLoader c = new CursorLoader(getActivity(), baseUri, CONTACTS_NUMBER_PROJECTION2, Data.MIMETYPE+" ='" + Nickname.CONTENT_ITEM_TYPE+"'", null, ORDER);
private static final String[] CONTACTS_NUMBER_PROJECTION2 = new String[] {
SipAddress.DISPLAY_NAME,
SipAddress.SIP_ADDRESS,
BaseColumns._ID};
を使用し、とはSimpleCursorAdapter
どちらもニックネームです。Nickname.NAME
SipAddress.SIP_ADDRESS
SimpleCursorAdapter adapter = new SimpleCursorAdapter(getActivity(), R.layout.contact_list, null,
new String[] {Nickname.NAME, SipAddress.SIP_ADDRESS},
new int[] {R.id.text1, R.id.text2}, 0);
スクリーンショットはこんな感じ。小さいフォントは Sip アドレスです。
に変更Nickname.CONTENT_ITEM_TYPE
するSipAddress.CONTENT_ITEM_TYPE
と、ニックネームの代わりに Sip アドレスが表示されます。両方を表示する方法がわかりません。
アップデート:
Nickname.NAME と SipAddress.SIP_ADDRESS をそれぞれ Nickname.DATA7 と Nickname.DATA* に変更しました。selectionArgs に「null」を追加しました。実際には、ニックネームと一口アドレスの両方が表示されますが、同じ行には表示されません。
更新 2:
sip とニックネームの値を StructuredName.DISPLAY_NAME と StructuredName.GIVEN_NAME の下に保存し、それらをアダプターにロードしました。selectionArgs を Data.MIMETYPE+" ='" + StructuredName.CONTENT_ITEM_TYPE+"'" に変更します
これが結果でした:
if (key.equals("alias")) {
contacts.add(ContentProviderOperation
.newInsert(
ContactsContract.Data.CONTENT_URI)
.withValueBackReference(
ContactsContract.Data.RAW_CONTACT_ID,
0)
.withValue(
ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(
ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
userDict.get(key).toString())
.build());
}
if (key.equals("sipExt")) {
contacts.add(ContentProviderOperation
.newInsert(
ContactsContract.Data.CONTENT_URI)
.withValueBackReference(
ContactsContract.Data.RAW_CONTACT_ID,
0)
.withValue(
ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(
ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME,
userDict.get(key).toString())
.build());
}