Supposons que vous avez un CheckboxPreference
dans votre PreferenceActivity
déclarée:
<CheckBoxPreference
android:defaultValue="false"
android:key="prefAutoLogin"
android:summary="@string/pref_autologin_summary"
android:title="@string/pref_autologin" />
Dans votre onOptionsItemSelected
son activité principale, vous vérifiez que l'élément de menu a été pressé, et dans le cas du menu des paramètres, vous démarrez votre PreferenceActivity
:
final Intent i = new Intent(this, MySettingActivity.class);
startActivityForResult(i, RESULT_SETTINGS);
// RESULT_SETTINGS is an integer constant to identify the preference activity
Vous commencez le MySettingsActivity
pour résultat, ce qui signifie l'activité en cours sera informé quand il retourne dans la méthode onActivityResult
. Vous écrasez cette méthode pour vérifier les modifications:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode)
{
case RESULT_SETTINGS:
// here you check whether the auto-login preference was checked or not:
final SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this);
final boolean autoLoginChecked = prefs.getBoolean("prefAutoLogin", false);
// prefAutoLogin is the key of your CheckBoxPreference declared in the xml above.
if (autoLoginChecked)
{
// perform the actions necessary when the checkbox is ticked
}
else
{
// ...
}
break;
}
[...]
default {...}
}
Si vous devez effectuer certaines actions uniquement lorsque la case est cochée de faux à vrai (et non à chaque retour de l'activité pref avec un état contrôlé.), vous devez stocker son état avant le début de l'activité de préférence, et match contre le nouvel Etat sur le retour:
private boolean initiallyChecked;
et avant de commencer l'activité de paramètres:
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
initiallyChecked = prefs.getBoolean("prefAutoLogin", false);
Ensuite, lorsque l'activité revient en arrière, vous ne cochez pas seulement si la valeur de case à cocher est vrai, mais vérifiez pour voir si elle était fausse avant:
if (autoLoginChecked && !initiallyChecked)
{ .... }
Pour plus voir référence this post on viralpatel.
dans votre onActivityResult, après vous être assuré que l'application est revenue du préf. activity, vérifiez la SharedPreference utilisée par PreferenceActivity pour voir si l'utilisateur a mis à jour la valeur en cochant la case. – rekaszeru
pouvez-vous s'il vous plaît fournir quelques exemples de vérification des préférences partagées du système? –
s'il vous plaît voir l'explication et les exemples dans la réponse ci-dessous sur la façon d'utiliser la préférence checkbox. – rekaszeru