PreferenceFragment.findPreference gibt immer NULL zurück

Ich versuche derzeit, ein Einstellungsmenü zu MultiSelectListPreference , das eine MultiSelectListPreference zeigt, um mehrere Kontakte aus deiner Kontaktliste auszuwählen.

In diesem Moment bekomme ich eine NullPointerException , wenn ich versuche, MultiSelectListPreference#setEntryValue(CharSequence[]) Wenn ich die setEntries zuerst, dass man die gleiche Ausnahme wirft.

Ich habe einen Haltepunkt gesetzt, um Schritt für Schritt zu sehen, was passiert. Die Variablen sind gefüllt, weil sie Strings speichern, sie können einen String "null" enthalten, also denke ich, dass es nicht scheitert, wenn es keinen Display_Name gibt oder so.

Ich habe das findPreference am Beispiel dieser Antwort

Wer hat eine Idee? Wenn du mehr Informationen brauchst, sag es mir. Danke fürs Lesen!

 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(); } } } 

EDIT: Ok, ich habe noch ein paar Schecks gemacht. – Ich habe eine Testpräferenz in meinem XML gemacht und die findPrefence benutzt, um einen Gegenstand von ihm zu machen, um mit zu arbeiten -> gibt NULL zurück – ich habe meinen Schlüssel meiner MultiSelectListPreference auf @ string / test gesetzt, legte dies in meine strings.xml, findpreference Immer noch Null zurück.

Kann es ein Problem mit meinem PreferenceFragment geben?

  • Touch Calculator in Android
  • Erhalten der Nullpointer-Ausnahme nach der Aktualisierung auf Android-Design-Unterstützung 22.2.1
  • GetActionBar () gibt Null zurück (AppCompat-v7 21)
  • Android - Wie überschneide ich die "Zurück" -Taste, so dass es nicht beenden () meine Aktivität?
  • FindFragmentById return null
  • Kann die Absicht, die von einem BroadcastReceiver erhalten wird, null sein?
  • Warum bekomme ich NullPointerException bei Verwendung setCurrentText oder setText für TextSwitcher?
  • Android: getContext (). GetContentResolver () bekommt manchmal NullPointerException
  • 3 Solutions collect form web for “PreferenceFragment.findPreference gibt immer NULL zurück”

    Ok, ich habe gefunden, was mein Problem war.

     MultiSelectListPreference mslp = (MultiSelectListPreference) findPreference("contactList"); 

    Gibt NULL zurück, weil

     addPreferencesFromResource(R.xml.preferences); 

    Ist nicht am Anfang … also hat es meine Einstellungen noch nicht geladen.

    Sie können dies mit zu lösen

     getFragmentManager().executePendingTransactions(); 

    Vor

     findPreference(section); 

    Keine der oben genannten Lösungen für mich arbeiten. findPreference() von PreferenceFragment aufgerufen, bei dem die PreferenceFragment geladen sind und die Standardwerte gesetzt sind, gibt immer null 🙁

    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.