ich muss den Defult-Wert für eine ListPreference festlegen, wenn die Aktivität beginnt Ich habe es mit ListPreference.setDefaultvalue("value");
versucht, aber es macht den ersten Eintrag der Liste als Standard. Ich brauche es, weil ich eine Bedingung überprüfen und als Standard den Wert festlegen muss, der diese Bedingung erfüllt. Ich denke, dass dies nicht aus der XML-Datei (mit Android:defaultValue
) möglich ist
Angenommen, ich habe dieses Array von Werten in der Datei arrays.xml:
<string-array name="opts">
<item>red</item>
<item>green</item>
<item>blue</item>
</string-array>
<string-array name="opts_values">
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
In der PreferenceScreen-XML:
<ListPreference
Android:title="Colour select"
Android:summary="Select your favourite"
Android:key="colour"
Android:entries="@array/opts"
Android:entryValues="@array/opts_values" />
In der Aktivität möchte ich so etwas tun:
String mycolour;
if (something) {
mycolour="1";
} else {
mycolour="2";
}
ListPreference colour = (ListPreference) findPreference ("colour");
colour.setDefaultValue(mycolour);
Aber es funktioniert nicht, weil es die erste Wahl als Standard trifft. Könnten Sie mir erklären, wie man einen anderen als Standard erstellt? Vielen Dank.
Hast du es versucht:
setValueIndex(int index);
Sie müssen den Standardwert von ListPreferences
nicht programmgesteuert behandeln. Sie können dies in der XML-Einstellungsdatei tun. Unten ist ein Beispiel
<string-array name="opts">
<item>red</item>
<item>green</item>
<item>blue</item>
</string-array>
<string-array name="opts_values">
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
<ListPreference
Android:title="Colour select"
Android:summary="Select your favourite"
Android:key="colour"
Android:entries="@array/opts"
Android:entryValues="@array/opts_values"
Android:defaultValue="2" />
hier habe ich 2
als Standardwert ausgewählt. Denken Sie daran, dass defaultvalue
das opts_values
Element ist.
Entschuldigung für mein schlechtes Englisch.
Code:
ListPreference dataPref = (ListPreference) findPreference("keyList");
if(dataPref.getValue() == null){
dataPref.setValueIndex(0); //set to index of your deafult value
}
Nur für die Aufzeichnung, wenn jemand anderes dieses Problem hat:
setValueIndex(int X)
setzt den Wert @ Index X auf den Standardwert - also es ist wahrscheinlich was Sie suchen .
Setzen Sie diesen WertNACHSie fügten die Werte hinzu! (dummer Fehler, aber ich brauchte eine halbe Stunde)
oder Sie können auch colour.setValue(mycolour);
versuchen
((ListPreference) findPreference("pref_language")).setValue(Locale
.getDefault().getLanguage());
setValue()
ist die Methode von ListPreference und setDefaultvalue
ist die Methode von Preference
Dies ist ein alter Beitrag, aber hier können Sie den Standardwert für ListPreference
mit der folgenden Codezeile festlegen:
PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false);
Eigentlich liegt es daran, dass die SharedPreferences bestehen bleiben, nachdem Sie die App neu erstellt haben. Deinstallieren Sie sie und versuchen Sie es erneut.
Sie können Ihren Standardwert festlegen, indem Sie den Schlüssel wie folgt verwenden
<string-array name="syncFrequency">
<item name="1">Block All Calls</item>
<item name="2">Block Black List</item>
<item name="3">Block Unknown Calls</item>
<item name="4">Allow White List</item>
<item name="5">Receive All Calls</item>
</string-array>
<string-array name="syncFrequencyValues">
<item name="1">Block_All_Calls</item>
<item name="2">Block_Black_List</item>
<item name="3">Block_Unknown_Calls</item>
<item name="4">Allow_White_List</item>
<item name="5">Receive_All_Calls</item>
</string-array>
<ListPreference
Android:key="prefSyncFrequency"
Android:entries="@array/syncFrequency"
Android:summary="%s"
Android:defaultValue="Block_Black_List"
Android:entryValues="@array/syncFrequencyValues"
Android:title="@string/call_block_options" />
Verwenden Sie das xml-Attribut Android:defaultValue="<VALUE>"
in Ihrem Listentag, um den Standardwert festzulegen.
Hinweis: Der
<VALUE>
ist der tatsächliche Wert und nicht der Index der Zeichenfolge Array.
Wenn es immer noch nicht funktioniert, führen Sie die folgenden Schritte aus.
Merkwürdig, ich weiß, aber es hat in meinem Fall funktioniert.