2016-03-21 2 views
0

J'ai vu des messages connexes comme celui-ci - Disable the Asynchronous display of a Toast [duplicate] et j'ai essayé la méthode cancel() à partir de là, mais ils ne résolvent pas mon problème. Peut-être est-ce dû à une différence liée à l'activité de préférence.Besoin d'afficher Toast juste après clic

S'il vous plaît, aidez-moi à améliorer mon code afin que le Toast s'affiche juste après le clic.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.pref_screen); 
    Context context = getApplicationContext(); 
    settings = PreferenceManager.getDefaultSharedPreferences(context); 
    settings.registerOnSharedPreferenceChangeListener(this); 
} 

public void onSharedPreferenceChanged(SharedPreferences settings, String key) { 
    Toast theToast; 
    theToast = Toast.makeText(this, "toast text", Toast.LENGTH_LONG); 

    if(key.equals("checkbox_key")){ 
     theToast.show(); 
    } 
    if (key.equals("checkbox_key")&& theToast != null){ 
     theToast.cancel(); 
    } 
} 

Répondre

0

Votre question est mal formulée, mais je suppose (après avoir lu votre code) que vous demandez est comment annuler en cours d'affichage Toast lorsque vous cocher/décocher une nouvelle boîte et que vous voulez afficher un nouveau Toast tout de suite dans ce cas. Le problème est que vous annulez le Toast que vous venez de créer, au lieu du Toast affiché, que vous avez créé précédemment.

Essayez de stocker le Toast dans une variable membre et d'annuler cela à la place. Quelque chose comme:

private Toast mCurrerntToast = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    //... 
} 

public void onSharedPreferenceChanged(SharedPreferences settings, String key) { 
    if(key.equals("checkbox_key")){ 
     //If there is a previous toast displayed, cancel it 
     if(mCurrentToast != null){ 
      mCurrentToast.cancel(); 
     } 

     //Display a new, more current Toast message 
     mCurrentToast = Toast.makeText(this, "toast text", Toast.LENGTH_LONG); 
     mCurrentToast.show(); 
    } 
} 

Permettez-moi de savoir si mon hypothèse de ce que vous posiez au sujet a eu tort et je vais essayer d'aider plus, mais je suis sûr que ce soit le problème que vous essayez de résoudre.

+0

Vous me comprenez bien. À propos de vous solution. AndroidStudio montre que la variable "mCurrentToast" n'a peut-être pas été initialisée. J'ai déplacé cette ligne 'mCurrentToast = Toast.makeText (ceci," toast texte ", Toast.LENGTH_LONG);' avant tout si les instructions comme dans mon code précédent, mais il bloque l'application (NullExeption). – Robert

+0

Vous ne pouvez pas déplacer cette ligne avant la ligne ".cancel()", sinon vous annulez votre nouveau Toast au lieu de l'ancien. Définissez mCurrentToast sur null lorsque vous le créez. Je vais mettre à jour mon exemple de code pour refléter cela. – ajpolt

+0

Maintenant, cela fonctionne parfaitement. Merci de votre aide! – Robert