web-dev-qa-db-fra.com

Comment définir la valeur par défaut d'un ListPreference

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.

43
Gnufabio

As-tu essayé: 

setValueIndex(int index);
27
biddulph.r

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.

91
Md. Naushad Alam

Excusez mon anglais. 

  1. Élément de liste
  2. Récupérer la liste Vérifier si la valeur est null. S'il est nul, définissez la valeur par défaut.

Code:

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

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

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)

3
Langusten Gustel

ou vous pouvez aussi essayer colour.setValue(mycolour);

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

setValue() est la méthode de ListPreference et setDefaultvalue est la méthode de Preference

2
laomo

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

En fait, c’est parce que les SharedPreferences persisteront après la reconstruction de l’application . Désinstallez-la, puis réessayez.

1
Yijun Li

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

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.

  • Effacer les données de l'application.
  • Désinstallez et réinstallez l'application
  • Vérifiez la préférence de liste, vous verrez la valeur par défaut sélectionnée

Étrange, je sais mais cela a fonctionné dans mon cas.

0
Vivek