Android 首选项上的重复联系人
我正在创建一个首选项活动,其中我有3个首选项。当我点击每个联系人时,我会加载联系人来选择一个。选择联系人后,我保存其姓名和电话号码,并将其显示在首选项中。我就是这样做的: preferences.xmlAndroid 首选项上的重复联系人,android,preferences,Android,Preferences,我正在创建一个首选项活动,其中我有3个首选项。当我点击每个联系人时,我会加载联系人来选择一个。选择联系人后,我保存其姓名和电话号码,并将其显示在首选项中。我就是这样做的: preferences.xml <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceCategory android:title="@strin
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory
android:title="@string/contact">
<Preference
android:key="Contact1"
android:title="Contact 1"/>
<Preference
android:key="Contact2"
android:title="Contact 2"/>
<Preference
android:key="Contact3"
android:title="Contact 3"/>
</PreferenceCategory>
</PreferenceScreen>
问题是,当我为
Contact1
设置联系人时,Contact2
和Contact3
也会获得相同的联系人。是我第一次使用首选项,所以我不知道这是什么原因。问题不在于首选项,而在于开关
语句
您需要在每条语句的结尾处打断。如果没有中断
,则匹配的案例标签后的语句将按顺序执行,而不考虑后续案例标签的表达式
只需包含一个break语句,以防止您的开关块中的语句丢失:
天啊!多么愚蠢的错误!现在可以工作了,谢谢!
SharedPreferences mPreferences;
Preference contact1;
Preference contact2;
Preference contact3;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
contact1 = findPreference("Contact1");
contact2 = findPreference("Contact2");
contact3 = findPreference("Contact3");
contact1.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT_1);
return false;
}
});
contact2.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT_2);
return false;
}
});
contact3.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT_3);
return false;
}
});
}
@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
Uri contactData = data.getData();
switch(reqCode) {
case (PICK_CONTACT_1):
if (resultCode == RESULT_OK){
String contactID = null;
String contactNumber = null;
String contactName = null;
/*Get contact ID*/
Cursor cursorID = getContentResolver().query(contactData, new String[]{ContactsContract.Contacts._ID},
null, null, null);
if (cursorID.moveToFirst()) {
contactID = cursorID.getString(cursorID.getColumnIndex(ContactsContract.Contacts._ID));
}
cursorID.close();
/*Get contact number using ID*/
Cursor cursorPhone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER},
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND " +
ContactsContract.CommonDataKinds.Phone.TYPE + " = " +
ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE,
new String[]{contactID}, null);
if (cursorPhone.moveToFirst()) {
contactNumber = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
cursorPhone.close();
/*Get name*/
Cursor cursor = getContentResolver().query(contactData, null, null, null, null);
if (cursor.moveToFirst()) {
contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
}
cursor.close();
/*Show on preferences*/
contact1.setTitle(contactName);
contact1.setSummary(contactNumber);
}
case (PICK_CONTACT_2):
if (resultCode == RESULT_OK){
String contactID = null;
String contactNumber = null;
String contactName = null;
/*Get contact ID*/
Cursor cursorID = getContentResolver().query(contactData, new String[]{ContactsContract.Contacts._ID},
null, null, null);
if (cursorID.moveToFirst()) {
contactID = cursorID.getString(cursorID.getColumnIndex(ContactsContract.Contacts._ID));
}
cursorID.close();
/*Get contact number using ID*/
Cursor cursorPhone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER},
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND " +
ContactsContract.CommonDataKinds.Phone.TYPE + " = " +
ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE,
new String[]{contactID}, null);
if (cursorPhone.moveToFirst()) {
contactNumber = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
cursorPhone.close();
/*Get name*/
Cursor cursor = getContentResolver().query(contactData, null, null, null, null);
if (cursor.moveToFirst()) {
contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
}
cursor.close();
/*Show on preferences*/
contact2.setTitle(contactName);
contact2.setSummary(contactNumber);
}
case (PICK_CONTACT_3):
if (resultCode == RESULT_OK){
String contactID = null;
String contactNumber = null;
String contactName = null;
/*Get contact ID*/
Cursor cursorID = getContentResolver().query(contactData, new String[]{ContactsContract.Contacts._ID},
null, null, null);
if (cursorID.moveToFirst()) {
contactID = cursorID.getString(cursorID.getColumnIndex(ContactsContract.Contacts._ID));
}
cursorID.close();
/*Get contact number using ID*/
Cursor cursorPhone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER},
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND " +
ContactsContract.CommonDataKinds.Phone.TYPE + " = " +
ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE,
new String[]{contactID}, null);
if (cursorPhone.moveToFirst()) {
contactNumber = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
cursorPhone.close();
/*Get name*/
Cursor cursor = getContentResolver().query(contactData, null, null, null, null);
if (cursor.moveToFirst()) {
contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
}
cursor.close();
/*Show on preferences*/
contact3.setTitle(contactName);
contact3.setSummary(contactNumber);
}
}
}
switch(reqCode) {
case (PICK_CONTACT_1):
---------
---------
break;
case (PICK_CONTACT_2):
---------
---------
break;
case (PICK_CONTACT_3):
---------
---------
break;
}