2011-09-06 13 views
9

Mostro il toast, non scompare, anche dopo che l'app è chiusa. Come posso risolvere?Android Toast non scomparirà

@Override 
public void onClipStoreLoadedClipsNotification(ClipStoreLoadedClipsNotification notif) 
{ 
    final ClipStoreLoadedClipsNotification notification = notif; 

    runOnUiThread(new Runnable() { 
     @Override 
     public void run() 
     { 
      Dialogs.DismissAll(); 
      list.onRefreshComplete(); 
      TextView text = (TextView)findViewById(R.id.loadclipstext); 
      ProgressBar pb = (ProgressBar)findViewById(R.id.loadclipsprogress); 

      if (notification.moreClipsAvailable) 
      { 
       text.setText(context.getString(R.string.loading_clips)); 
       pb.setVisibility(View.VISIBLE); 
      } 
      else 
      { 
       text.setText(context.getString(R.string.no_clips)); 
       pb.setVisibility(View.INVISIBLE); 
       int duration = Toast.LENGTH_SHORT; 
       Toast.makeText(SugarLoafContext.playbackTabContext, "No clips found.", duration).show(); 
      } 

      SugarLoafContext.currentCamera = notification.camera; 
      clipList = notification.clips; 

      refreshListView(); 
      readyToLoadMoreClips = true; 
      if (!firstClipsLoaded) 
       firstClipsLoaded = true; 
     } 
    }); 


} 
+0

imposta la durata come questa int duration = Toast.LENGTH_SHORT; –

risposta

7

L'unica spiegazione è che il vostro Toast è chiamato in un ciclo. Dovresti tenere traccia dello toast .show() e vedere se non è chiamato infinite volte.

Un altro modo visivo sarebbe quello di fare questo

Toast.makeText(SugarLoafContext.playbackTabContext, "No clips found.", duration).show(); 
Toast.makeText(SugarLoafContext.playbackTabContext, "Do you understand now?", duration).show(); 

Sono sicuro che si vedrà entrambi brindisi in alternativa, in un momento luuungo ...

44

E 'in esecuzione all'interno di un IntentService ???

Se è così, il problema è che i Servizi di Intento in Android vengono eseguiti in un thread diverso rispetto a quello principale, quindi il Toast viene mostrato in un thread diverso rispetto a quello principale, dopo che il tempo di mostrare è terminato, il sistema Android non è in grado di trovare dove si trova il Toast, quindi non può rimuoverlo.

Ho avuto lo stesso problema e ora, consiglio a tutti di NON mostrare Toast all'interno di un IntentService, provare invece a eseguire un servizio di comunicazione o ad aprire un'attività o provare qualcosa di diverso se è completamente necessario mostrare il Crostini.

Il fatto che il Toast non scompaia quando chiudi l'App è che IntentService è ancora in esecuzione e devi riavviare il sistema o disinstallare l'App per il Servizio Intent per chiuderla.

+0

Non è stato un problema per me, ero così eccitato all'idea di vedere qualcosa in esecuzione sullo sfondo :-) – Nabin

+0

Per quanto mi riguarda anche per qualche problema, lo stesso sto usando anche IntentService. C'è qualche soluzione per questo? – sandeepmaaram

+0

Avviare un'attività e lasciare che l'attività sia quella che avvia il pane tostato. So che è difficile, ma dobbiamo capire che IntentService non funziona sul thread dell'interfaccia utente, quindi dobbiamo avviare un'attività (con il flag NEW_TASK e consentire all'attività di avviare il toast). Se lo desideri, puoi avviare l'attività come invisibile affinché l'utente non veda nulla di strano. Altrimenti puoi anche controllare l'elemento Snackbar: https://developer.android.com/reference/android/support/design/widget/Snackbar.html – zapotec

0

Ciò può verificarsi anche se il dispositivo non ha una connessione di rete e l'app esegue un controllo della licenza e mostra un Toast dei risultati. Una delle mie app aveva questo problema, perché stavo visualizzando un toast quando verificavo che l'app fosse autorizzata. Senza una connessione di rete, Toast comunicava all'utente che doveva essere effettuato un tentativo di licenza e, quando ho collegato il Toast, è stato rimosso perché il controllo della licenza poteva funzionare.

Problemi correlati