2011-09-06 21 views
9

私は乾杯を見せて、アプリが閉じられた後でも消えません。どうすれば修正できますか?Androidトーストは消えません

@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

このような期間を設定します。int duration = Toast.LENGTH_SHORT; –

答えて

7

あなたのToastがループで呼び出されるという唯一の説明です。 toast .show()を追跡し、無限に呼ばれていないかどうかを確認する必要があります。

他の視覚的な方法は、私はあなたがlooong時間の間に交互に両方のトーストが表示されます確信しています。この

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

を行うことであろう...

44

それはIntentService内で実行されています?

Androidのインテントサービスがメインのスレッドとは別のスレッドで実行されるため、表示が完了した後にトーストがメインのスレッドとは別のスレッドで表示されるという問題があります。 AndroidシステムはToastがどこにあるかを見つけることができないため、削除できません。

私はIntentServiceの中にToastを表示しないことをお勧めします。代わりに1つのcommomサービスを実行するか、アクティビティを開くか、トースト。

IntentServiceがまだ実行中であり、システムを再起動するか、インテントサービスを閉じるためにアプリケーションをアンインストールする必要があるという点で、トーストが消えないという事実があります。

+0

私にとってはそれほど問題ではありませんでした。私はバックグラウンドで何かを見てとても興奮していました:-) – Nabin

+0

私にもまた問題があります。私もIntentServiceを使っています。これにはどんな解決策がありますか? – sandeepmaaram

+0

アクティビティを起動し、アクティビティをトーストを起動するアクティビティにします。私は難しいことは分かっていますが、IntentServiceがUIスレッド上で動作しないことを理解しなければならないので、アクティビティを起動して(NEW_TASKフラグを使用して、アクティビティでToastを起動させる)必要があります。必要に応じて、ユーザが見えないようにアクティビティを表示することができます。それ以外の場合は、Snackbar要素(https://developer.android.com/reference/android/support/design/widget/Snackbar.html)で確認することもできます。 – zapotec

0

これは、デバイスにネットワーク接続がなく、アプリがライセンスチェックを行い、結果のトーストを表示する場合にも発生します。アプリのライセンスが確認されたときにToastを表示していたので、私のアプリの1つにこの問題がありました。ネットワーク接続がなければ、ライセンスの再試行が行われたことをユーザーに伝えるトーストが残っていて、ライセンスチェックが機能するため、接続したときにトーストが削除されました。

関連する問題