0

J'essaie de récupérer la valeur de SwitchPreference en utilisant SharedPreferences mais cela ne fonctionne pas. J'utilise SwitchPreference pour que l'utilisateur puisse activer/désactiver les notifications, mais il affiche les notifications, peu importe la valeur. Voici le code.Android SwitchPreference ne fonctionne pas

NotificationUtils.java

SharedPreferences preferences = context.getSharedPreferences("MyPreferences", Context.MODE_PRIVATE); 
    if (preferences.getBoolean("notification_key", true)) { 
     notificationManager.notify(NOTIFICATION_ID + rowId, notBuilder.build()); 
    } 

preferences.xml

<SwitchPreference 
    android:contentDescription="Turn notifications on/off" 
    android:defaultValue="true" 
    android:key="notification_key" 
    android:summaryOff="Off" 
    android:summaryOn="On" 
    android:title="Notifications" /> 

J'ai aussi enregistré et l'substituée auditeur OnSharedPreferenceChange dans SettingsFragment.java.

Répondre

0

Je l'ai résolu, en fait la valeur ne basculait pas, dans l'écran des paramètres, le commutateur s'éteignait et s'éteignait mais la valeur restait la valeur par défaut. Résolu en définissant la nouvelle valeur dans OnPreferenceChangeListener et qui a fonctionné.

0

Essayez de remplacer

SharedPreferences preferences = context.getSharedPreferences("MyPreferences", Context.MODE_PRIVATE); 

avec

PreferenceManager.getDefaultSharedPreferences(context); 

Je crois que vous essayez de récupérer "notification_key" du mal SharedPreferences, ce qui explique pourquoi il utilise toujours la valeur par défaut de true et de montrer votre avis .

Edit: Vous pouvez vérifier si le SharedPreferences que vous utilisez contient la clé « notification_key » avec la méthode contains().

+0

J'ai utilisé la méthode getDefaulSharedPreferences (context) mais la même chose se produit, vérifiée avec la méthode contains si la clé existe et que la valeur est true. Lors de l'utilisation de la méthode getBoolean, boolean defValue est fourni et affiche des notifications, s'il est défini sur true quel que soit l'état du commutateur et si defValue est défini sur false, les notifications ne s'affichent pas même si l'état du commutateur est activé. Je ne peux pas comprendre ce qui se passe là-bas. –