2017-09-04 2 views
0

Je veux que mon application fasse une notification après que l'utilisateur bascule un commutateur dans les paramètres. La page des paramètres est statique, donc je ne peux pas utiliser showNotification() ici. Y at-il un moyen de construire une notification comme ça ??showNotification() en statique Android

public static class MainPreferenceFragment extends PreferenceFragment { 
      @Override 
      public void onCreate(final Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       addPreferencesFromResource(R.xml.pref_main); 

       final SwitchPreference notiswitch = (SwitchPreference) findPreference(getString(R.string.settings_notification_key)); 
       notiswitch.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 
        @Override 
        public boolean onPreferenceChange(Preference preference, Object newValue) { 
         if(!((Boolean) newValue)) {  //default false 
          Toast.makeText(getActivity(), "OFF", 
            Toast.LENGTH_SHORT).show(); 

         } else { 
          Toast.makeText(getActivity(), "ON", 
            Toast.LENGTH_SHORT).show(); 
          //TODO make notification 
          showNotification();//error here 

         } 
         return true; 
        } 
       }); 
      } 
} 

public void showNotification() { 
+0

Vous n'avez pas ajouté le code de showNotification. Aussi, veuillez attacher votre logcat. – jonathanrz

+0

showNotification est juste une simple notification. Le problème est que le premier showNotification est souligné en rouge et dit qu'il est non-statique et ne peut pas être référencé. –

Répondre

3

On dirait que vous avez fait MainPreferenceFragment comme classe interne statique à l'intérieur d'une classe d'activité qui contient la méthode showNotification() et sert d'hôte pour le fragment.

Ma suggestion est d'utiliser une approche classique de la communication activity-fragment - à travers l'activité d'hébergement du fragment de moulage vers l'interface requise et d'appeler la méthode appropriée à partir de celle-ci.

Par exemple:

Créer une nouvelle interface dans un fichier séparé:

public interface NotificationView{ 
    void showNotification(); 
} 

ensuite faire l'activité qui responsable de la mise en œuvre montrant un fragment de l'interface, et passer outre la méthode showNotification.

Ensuite ajouter à la classe MainPreferenceFragment un champ privé NotificationView callback; et lsinitialisez ainsi:

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    if (activity instanceOf NotificationView){ 
     callback = (NotificationView) activity; 
    } 
} 

Et maintenant, vous êtes en mesure d'appeler callback.showNotification(); où vous avez besoin dans votre fragment. Mais n'oubliez pas de vérifier le rappel au null avant de l'utiliser si vous utilisez le fragment avec une autre activité.

J'espère que cela aidera!

+0

Monsieur, je pense que je suis sur le point de réussir, mais callback.showNotification(); a une erreur indiquant que le rappel n'a peut-être pas été initialisé. –

+0

Assurez-vous que vous ajoutez le fragment à l'activité qui implémente l'interface de NotificationView –

+0

que j'ai fait, il dit que le rappel n'est pas initialisé. –