web-dev-qa-db-fra.com

Android Préférence de case à cocher

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;
    }
});
27
erdomester

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;
        }
    }); 
48
David Snabel-Caunt

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;
    }
}); 
14
Xample
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.

0
FireTr3e