PreferenceFragment.findPreference zawsze zwraca NULL

Obecnie próbuję stworzyć menu ustawień, które pokażeMultiSelectListPreference, aby wybrać wiele kontaktów z listy kontaktów.

W tej chwili otrzymujęNullPointerException, kiedy próbujęMultiSelectListPreference#setEntryValue(CharSequence[]) Jeśli umieściłemsetEntries po pierwsze, ten sam zgłasza ten sam wyjątek.

Umieściłem punkt przerwania, aby zobaczyć krok po kroku, co się dzieje. Zmienne są wypełniane, ponieważ są przechowywaneStrings, mogą zawieraćString „null”, więc myślę, że nie zawiedzie, jeśli nie maDisplay_Name dostępne lub tak.

Bazę findPreference oparłem na przykładzieta odpowiedź

Ktoś ma pomysł? Jeśli potrzebujesz więcej informacji, powiedz mi. Dziękuje za przeczytanie!

package be.wdk.sendtowork;contactNumberArray

import android.database.Cursor;
import android.os.Bundle;
import android.preference.MultiSelectListPreference;
import android.preference.PreferenceFragment;
import android.provider.ContactsContract;
import android.util.Log;
import android.widget.Toast;

public class PreferenceClass extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Integer countContacts = 0;

        String[] projection = new String[]{
                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                ContactsContract.CommonDataKinds.Phone.NUMBER,
                ContactsContract.CommonDataKinds.Phone.PHOTO_URI
        };

        String selection = ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER;
        String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME;
        try {
            Cursor c1 = getActivity().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, selection, null, sortOrder);
            c1.moveToFirst();
            Integer c1columncount = c1.getColumnCount();
            Integer c1count = c1.getCount();
            Toast toastje = Toast.makeText(getActivity(), c1columncount.toString() + " - " + c1count.toString(), Toast.LENGTH_SHORT);
            toastje.show();

            CharSequence[] contactNameArray = new CharSequence[c1count], contactNumberArray = new CharSequence[c1count];
            MultiSelectListPreference mslp = (MultiSelectListPreference) findPreference("contactList");
            do {
                contactNameArray[countContacts] = c1.getString(0) + " - " + c1.getString(2);
                contactNumberArray[countContacts] = c1.getString(1);
                countContacts += 1;
            } while(c1.moveToNext());

            mslp.setEntryValues(contactNumberArray); //<- line that throws the error
            mslp.setEntries(contactNameArray);
            addPreferencesFromResource(R.xml.preferences);
        } 
        catch (Exception e) {
            Log.v("TAG", " " + e.toString());
            e.getMessage();
        }
    }
}

EDYTOWAĆ: Ok, zrobiłem jeszcze kilka czeków. -Ułożyłem preferencję testową w moim XML i użyłem findPrefence, aby obiekt z nim działał -> zwraca NULL -I ustawiłem klucz mojego MultiSelectListPreference na @ string / test, umieściłem to w moim strings.xml, findpreference nadal zwraca Null.

Czy może wystąpić problem z moim PreferenceFragment?

questionAnswers(3)

yourAnswerToTheQuestion