Ich habe ein Projekt, das ich in Android Studio erstelle. Ich habe den vorgefertigten Einstellungsbildschirm mit Fragmenten hinzugefügt, die kompiliert und gut laufen. Ich habe eine MultiSelectListPreference zu einem der Einstellungsbildschirme hinzugefügt, die Feineinstellungen anzeigt und Voreinstellungen speichert. Der DefaultValue funktioniert jedoch nicht, egal ob ich ihn über Java oder XML hinzufüge. Ich habe die Punkte anderer Fragen darüber gelesen, wie das geht. Ich weiß wie. Meine Frage ist, was könnte dazu führen, dass es nicht wie vorgesehen funktioniert?MultiSelectListPreference defaultValues funktioniert nicht
pref_general.xml
<MultiSelectListPreference
android:key="@string/pref_key_starting_addresses"
android:summary="@string/pref_description_addresses"
android:title="@string/pref_title_addresses"
android:entries="@array/empty_array"
android:entryValues="@array/empty_array" />
PreferenceActivity.java
/**
* This method autopopulates a MultiSelectListPreference with array values
* loaded from XML.
*/
private void populateMultiSelectListPreference() {
List<TypedArray> origins = ResourceHelper.getMultiTypedArray(mContext, "origins");
CharSequence[] entries = new CharSequence[origins.size()];
CharSequence[] values = new CharSequence[origins.size()];
int counter = 0;
for (TypedArray item : origins) {
entries[counter] = item.getString(0);
values[counter] = String.valueOf(counter);
counter++;
}
final MultiSelectListPreference lp = (MultiSelectListPreference) findPreference(getString(R.string.pref_key_starting_addresses));
lp.setEntries(entries);
lp.setDefaultValue(values);
lp.setEntryValues(values);
}
arrays.xml
<string-array name="empty_array" />
<!-- a number of these are used to generate the MultiSelectListPreference
titles and entry values-->
<array name="origins_0">
<item>Text used for title</item>
<item>data 1</item>
<item>data 2</item>
</array>
Ich weiß, dass alles richtig funktioniert, weil das Debuggen zeigt, dass values
eine gültige Set enthält und Speichern von Voreinstellungen funktioniert gut. Dies bedeutet, dass lp.setEntryValues(values)
funktioniert und dass values
ein ordnungsgemäß formatiertes Set ist. lp.setDefaultValue(values)
hat jedoch keine Wirkung. Die Kontrollkästchen sind beim ersten Start deaktiviert. Mein Ziel ist es, sie alle standardmäßig ausgewählt zu haben.
Ja, ich habe den Befehl Clean and rerun 'app'
aus dem Menü Ausführen von Android Studio zwischen den Tests verwendet. Außerdem habe ich den App-Cache manuell auf dem Gerät gelöscht.
[EDIT]
Mit Vorschläge in den Kommentaren, ich habe auch versucht, die folgende Änderung.
private void populateMultiSelectListPreference() {
List<TypedArray> origins = ResourceHelper.getMultiTypedArray(mContext, "origins");
CharSequence[] entries = new CharSequence[origins.size()];
CharSequence[] values = new CharSequence[origins.size()];
Set<String> defaults = new HashSet<>();
int counter = 0;
for (TypedArray item : origins) {
entries[counter] = item.getString(0);
values[counter] = String.valueOf(counter);
defaults.add(String.valueOf(counter));
counter++;
}
final MultiSelectListPreference lp = (MultiSelectListPreference) findPreference(getString(R.string.pref_key_starting_addresses));
lp.setEntries(entries);
lp.setEntryValues(values);
lp.setDefaultValue(defaults);
}
wo rufen Sie 'populateMultiSelectListPreference' auf? – pskink
Es gibt keinen Grund, warum es nicht direkt in XML funktionieren könnte. Können Sie das, was Sie mit XML versucht haben, und die damit verbundenen Arrays posten? –
Halten Sie das Array nicht leer. Versuchen Sie, dem string-array in arrays.xml Elemente hinzuzufügen. – WannaBeGeek