Android 首选项上的重复联系人

Android 首选项上的重复联系人,android,preferences,Android,Preferences,我正在创建一个首选项活动,其中我有3个首选项。当我点击每个联系人时,我会加载联系人来选择一个。选择联系人后,我保存其姓名和电话号码,并将其显示在首选项中。我就是这样做的: preferences.xml <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceCategory android:title="@strin

我正在创建一个首选项活动,其中我有3个首选项。当我点击每个联系人时,我会加载联系人来选择一个。选择联系人后,我保存其姓名和电话号码,并将其显示在首选项中。我就是这样做的:

preferences.xml

<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;

}