webentwicklung-frage-antwort-db.com.de

Festlegen des Standardwerts einer ListPreference

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.

43
Gnufabio

Hast du es versucht: 

setValueIndex(int index);
27
biddulph.r

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.

91

Entschuldigung für mein schlechtes Englisch. 

  1. Listenpunkt
  2. Liste abrufen Prüfen Sie, ob der Wert null ist. Wenn es null ist, setzen Sie den Standardwert.

Code:

ListPreference dataPref = (ListPreference) findPreference("keyList");

if(dataPref.getValue() == null){
    dataPref.setValueIndex(0); //set to index of your deafult value
}
8
Leandro P.

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)

3

oder Sie können auch colour.setValue(mycolour); versuchen

3
ungalcrys
((ListPreference) findPreference("pref_language")).setValue(Locale
                .getDefault().getLanguage());

setValue() ist die Methode von ListPreference und setDefaultvalue ist die Methode von Preference

2
laomo

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);
1
wooldridgetm

Eigentlich liegt es daran, dass die SharedPreferences bestehen bleiben, nachdem Sie die App neu erstellt haben. Deinstallieren Sie sie und versuchen Sie es erneut.

1
Yijun Li

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" />
1
pavel

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.

  • Anwendungsdaten löschen.
  • Deinstallieren Sie die App und installieren Sie sie erneut
  • Überprüfen Sie die Listeneinstellung. Der Standardwert ist ausgewählt

Merkwürdig, ich weiß, aber es hat in meinem Fall funktioniert.

0
Vivek