2010-12-03 22 views
5

J'ai un ListPreference et il a une valeur par défaut et ça marche très bien. J'ai aussi une préférence qui réinitialise toutes les préférences partagées qui fonctionne bien. Le problème est que si vous revenez dans le ListPreference il montre toujours l'ancienne valeur. Si vous quittez complètement les préférences et que vous revenez, cela s'affiche correctement. Donc, la question est de savoir comment puis-je forcer le ListPreference à utiliser la valeur correcte? Toutes les autres préférences semblent fonctionner correctement.Comment forcer un listPreference à réinitialiser sa valeur?

J'ai trouvé un travail mais je ne suis pas content car cela me semble sale. Lorsque l'utilisateur clique sur la réinitialisation, après que les valeurs ont été réinitialisées, je mets moi-même la valeur à la valeur déjà définie.

((ListPreference) findPreference(myListKey)).setValue(String.valueOf(DEFAULT_VALUE)); 

Merci d'avance.

Répondre

0

Je pense que vous devriez remplacer la méthode onSetInitialValue de ListPreference. comme ça.

CustomListPreference public class étend ListPreference {

onSetInitialValue protected void (restoreValue booléen, objet defaultValue) {

// quand il alreay initialisation ou non votre valeur d'option si (restoreValue) {

} else {// mis à defautlValue

}

}

}

1

Je sais que tard, mais peut-être quelqu'un d'autre trébucher sur ce pourrait être utile.

Preference reset = (Preference) findPreference("reset"); 
reset.setOnPreferenceClickListener(new OnPreferenceClickListener() { 

    public boolean onPreferenceClick(Preference preference) { 
    // TODO Auto-generated method stub 
    preference.getEditor().clear().commit(); 
     Toast.makeText(getBaseContext(), 
       "Restored to default settings", Toast.LENGTH_SHORT) 
       .show(); 
     return false; 
     } 
    }); 
+2

@ user1780619 ne fonctionne pas pour moi du tout - il ne voit pas clairement la sélection de la liste – likejiujitsu

+0

Ne fonctionne pas pour moi. – Whome

0
ListPreference pref = (ListPreference) findPreference ("yeeha"); 

pref.setValue(null); 
0

J'ai eu le même problème à mettre ma liste des catégories dans le ListPreference. Le problème est que vous ne pouvez pas modifier les options visibles dans la boîte de dialogue avec la liste par la méthode setEntries (la définition des entrées dans l'écouteur de clic est trop tardive).

La solution pour moi était d'ajouter le DrawerListener qui indique mon PreferenceFragment quand il devrait invalider.

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

final MainOptionsFragment fragment = (MainOptionsFragment) getFragmentManager(). 
      findFragmentById(R.id.fragment_drawer); 

mDrawerOptions = new DrawerLayout.SimpleDrawerListener() { 
    @Override 
    public void onDrawerOpened(View drawerView) { 
     super.onDrawerOpened(drawerView); 
     fragment.onOpened(); 
    } 
}; 

mDrawerLayout.addDrawerListener(mDrawerOptions); 

Une autre solution est la méthode écrase des onPrepareDialogBuilder, qui fixerait les entrées avant la boîte de dialogue est préparée.

class CustomListPreference extends ListPreference { 
    @Override 
    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { 
     // TODO setEntries 
     super.onPrepareDialogBuilder(builder); 
    } 
} 
1

Azizi Musa est sur quelque chose, mais null lèvera une exception.

Cela a cependant:

ListPreference yeeha = (ListPreference) findPreference ("yeeha"); 

yeeha.setValue("");