je dois définir la valeur par défaut pour un ListPreference lorsque l'activité commence . J'ai essayé avec ListPreference.setDefaultvalue("value");
mais cela fait de la première entrée de la liste par défaut. J'en ai besoin parce que je dois vérifier une condition et définir comme valeur par défaut la valeur qui satisfait cette condition. Je pense donc que cela ne peut pas être fait à partir du fichier xml (avec Android:defaultValue
)
Par exemple, supposons que j'ai ce tableau de valeurs dans le fichier 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>
Dans le fichier PreferenceScreen xml:
<ListPreference
Android:title="Colour select"
Android:summary="Select your favourite"
Android:key="colour"
Android:entries="@array/opts"
Android:entryValues="@array/opts_values" />
Dans l'activité, j'aimerais faire quelque chose comme ceci:
String mycolour;
if (something) {
mycolour="1";
} else {
mycolour="2";
}
ListPreference colour = (ListPreference) findPreference ("colour");
colour.setDefaultValue(mycolour);
Mais cela ne fonctionne pas, car il fait le premier choix par défaut. Pourriez-vous m'expliquer comment en faire un autre par défaut? Merci.
As-tu essayé:
setValueIndex(int index);
Vous n'avez pas besoin de gérer par programme la valeur par défaut de ListPreferences
. Vous pouvez le faire dans un fichier de paramétrage XML. Ci-dessous un exemple
<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" />
ici, j'ai sélectionné 2
comme valeur par défaut. Rappelez-vous que defaultvalue
sera opts_values
element.
Excusez mon anglais.
Code:
ListPreference dataPref = (ListPreference) findPreference("keyList");
if(dataPref.getValue() == null){
dataPref.setValueIndex(0); //set to index of your deafult value
}
Juste pour le compte rendu si quelqu'un d'autre a ce problème:
setValueIndex(int X)
définit la valeur @ index X sur la valeur par défaut - so c'est probablement ce que vous recherchez .
Définissez cette valeurAPR&EGRAVE;Svous avez ajouté les valeurs! (erreur stupide mais m'a pris une demi-heure)
ou vous pouvez aussi essayer colour.setValue(mycolour);
((ListPreference) findPreference("pref_language")).setValue(Locale
.getDefault().getLanguage());
setValue()
est la méthode de ListPreference et setDefaultvalue
est la méthode de Preference
Ceci est un ancien post, mais voici un autre moyen de définir la valeur par défaut de ListPreference
avec la ligne de code suivante:
PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false);
En fait, c’est parce que les SharedPreferences persisteront après la reconstruction de l’application . Désinstallez-la, puis réessayez.
Vous pouvez définir votre valeur par défaut en utilisant la clé comme ceci
<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" />
Utilisez l'attribut xml Android:defaultValue="<VALUE>"
dans votre balise de liste pour définir la valeur par défaut.
Remarque: le
<VALUE>
est la valeur réelle et non l’index de la chaîne tableau.
Si cela ne fonctionne toujours pas, essayez les étapes ci-dessous.
Étrange, je sais mais cela a fonctionné dans mon cas.