2011-01-20 14 views
6

Jeśli wznoszę toast, gdy aktywność mojej aplikacji nie jest na pierwszym planie, toast nadal będzie wyświetlany na ekranie. Jak mogę zapobiec wyświetlaniu tego tostu, gdy moja aplikacja działa w tle. to znaczy, że żadna z jego aktywności aktualnie nie jest pokazywana.Chcesz ukryć tosty z Androidem, gdy aplikacja jest w tle.

Myślę, że muszę jakoś wykryć, że moje działania nie są aktywnością, która jest obecnie pokazywana i kiedy nie jest prawdą, nie wydaje żadnych toastów; ale jak wykryłbym ten stan?

Dzięki

Odpowiedz

9

Ustaw flagę, gdy aplikacja jest w tle (np.) i nie wysyłaj tostów, jeśli ustawiono flagę.

Jeśli masz mnóstwo zajęć, możesz zdefiniować własną klasę bazową Activity, która otacza tę funkcję.

+0

+1 mnie przez 4 sekundy;) –

2

Czy próbowali ustawienie zmiennej lub jakiś wskaźnik, gdy metoda onPause() nazywa dla tej działalności, dla określenia jego zostały wprowadzone w tle, a następnie skręcić tego wskaźnika od kiedy onResume() nazywa?

Niech to się stanie, jeśli wskaźnik jest wyłączony.

+1

+1 ... nic złego w byciu drugim miejscem :) – EboMike

0

W mojej aplikacji, kolejka tostów pojawia się ponownie i ponownie, gdy aplikacja przechodzi w tło, więc podążałem za nią, aby rozwiązać problem.

Dodaj kod, aby wykryć, kiedy aplikacja przechodzi w tło. Jednym ze sposobów zarejestrowania programu obsługi cyklu życia. Aby uzyskać więcej szczegółów ref

registerActivityLifecycleCallbacks(new MyLifecycleHandler()); 

App.inBackground = true; gdy aplikacja przechodzi do tła i pokazać tosty za pomocą klasy 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(); 
    } 

} 

połączenia SmartToast.cancelAll(); metoda gdy aplikacja przechodzi w tle, aby ukryć wszystkie oczekujące bieżące i toasty. Kod jest fajny. Cieszyć się!

Powiązane problemy