Je ne trouve aucun tutoriel sur les préférences des cases à cocher. Je peux utiliser une préférence de liste, mais je ne peux pas utiliser la préférence de case à cocher. Pour l'instant, je veux que si l'utilisateur définit sur la checbox, un msg de toast indique "vrai" et s'il le déclenche, le msg de toast dit "faux". Jusqu'à présent, j'ai ceci:
preferences.xml:
<CheckBoxPreference
Android:title="Show Call UI"
Android:defaultValue="true"
Android:summary="Show Call Interface when clicking call button"
Android:key="checkboxPref" />
EditPreferences.Java:
public class EditPreferences extends PreferenceActivity {
String listPreference;
boolean checkboxPreference;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
public void onStart(Intent intent, int startId) {
getPrefs();
}
private void getPrefs() {
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
listPreference = prefs.getString("listPref", "nr1");
checkboxPreference = prefs.getBoolean("checkboxPref", true);
}
}
Edit: Solution grâce à David Caunt:
checkboxPreference.
setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue.toString().equals("true")) {
Toast.makeText(getApplicationContext(), "CB: " + "true",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "CB: " + "false",
Toast.LENGTH_SHORT).show();
}
return true;
}
});
Vous devez ajouter un écouteur à la préférence dans votre méthode onCreate
final CheckBoxPreference checkboxPref = (CheckBoxPreference) getPreferenceManager().findPreference("checkboxPref");
checkboxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
Log.d("MyApp", "Pref " + preference.getKey() + " changed to " + newValue.toString());
return true;
}
});
Vous pouvez convertir la valeur de la case à cocher en booléen. Cela pourrait être plus sûr et plus extensible que de vérifier la valeur toString ().
final CheckBoxPreference checkboxPref = (CheckBoxPreference) getPreferenceManager().findPreference("checkboxPref");
checkboxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
if(newValue instanceof Boolean){
Boolean boolVal = (Boolean)newValue;
}
return true;
}
});
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
Log.i("LOG", String.valueOf(sp.getBoolean("key", false)));
Le moyen le plus simple que j'ai trouvé d'obtenir de la valeur si l'article est pressé. Si le journal est:
I/LOG: vrai
La case est cochée
I/LOG: faux
La case n'est pas cochée
J'espère que ça répond à ta question.