2011-01-20 18 views
6

Se tengo un brindisi quando l'attività della mia app non è in primo piano, il brindisi verrà comunque visualizzato sullo schermo. Come posso impedire che il mio brindisi venga visualizzato quando la mia app è in esecuzione in background. non con nessuna delle sue attività attualmente viene mostrata l'attività.Vuoi nascondere il toast Android quando l'app è sullo sfondo

Sto pensando che devo in qualche modo rilevare che le mie attività non sono l'attività che viene attualmente mostrata e quando è vero non emettono alcun toast; ma come potrei rilevare questa condizione?

Grazie

risposta

9

Impostare un flag quando l'app è in background (ad esempio in) e non inviare toast se il flag è impostato.

Se si dispone di un sacco di attività, è possibile definire la propria classe di base Activity che avvolge questa funzionalità.

+0

+1 mi ha preso per 4 secondi;) –

2

hai provato l'impostazione di una variabile o di qualche indicatore quando il metodo onPause() viene chiamato per tale attività per indicare la sua stato messo in secondo piano, poi girare a che l'indicatore quando onResume() si chiama?

Quindi lasciare che brindisi si verificano se l'indicatore è spento.

+1

+1 ... niente di sbagliato con il secondo posto :) – EboMike

0

Nella mia app, i toasts in coda vengono visualizzati più e più volte quando l'app passa in background, quindi ho seguito per risolvere il problema.

Aggiungi codice per rilevare quando l'app entra in background. Un modo per registrare il gestore del ciclo di vita. Per maggiori dettagli ref

registerActivityLifecycleCallbacks(new MyLifecycleHandler()); 

App.inBackground = true; quando applicazione va a sfondo e mostrare brindisi con classe SmartToast

public class SmartToast { 

    static ArrayList<WeakReference<Toast>> toasts = new ArrayList<>(); 
    public static void showToast(@NonNull Context context,@NonNull String message){ 
     //this will not allowed to show toast when app in background 
     if(App.inBackground) return; 
     Toast toast = Toast.makeText(context,message,Toast.LENGTH_SHORT); 
     toasts.add(new WeakReference<>(toast)); 
     toast.show(); 

     //clean up WeakReference objects itself 
     ArrayList<WeakReference<Toast>> nullToasts = new ArrayList<>(); 
     for (WeakReference<Toast> weakToast : toasts) { 
      if(weakToast.get() == null) nullToasts.add(weakToast); 
     } 
     toasts.remove(nullToasts); 
    } 

    public static void cancelAll(){ 
     for (WeakReference<Toast> weakToast : toasts) { 
      if(weakToast.get() != null) weakToast.get().cancel(); 
     } 
     toasts.clear(); 
    } 

} 

chiamata SmartToast.cancelAll(); metodo quando un'applicazione passa in fondo per nascondere brindisi in sospeso in corso e tutti. Il codice è divertente. Godere!

Problemi correlati