2

以下のコードは私の現在の実装を示しています。ここでは toast オブジェクトを作成し、onPause() で閉じています。これは、トーストのキューがなくなるまで正常に機能します。

public static long **savedTimeStamp=0**;
    Toast showToastMessage;

if(System.currentTimeMillis()/1000 - savedTimeStamp >= 60 || savedTimeStamp==0){
    showToastMessage=Toast.makeText(this.this, "Toast message", Toast.LENGTH_LONG);
    showToastMessage.show();
    savedTimeStamp=System.currentTimeMillis()/1000;
}

    @Override
             protected void onPause() {
                  super.onPause();
                  if(showToastMessage!=null)
                    {
                    showToastMessage.cancel();
                    }
    }
4

4 に答える 4

6

インスタンスでのみ使用するのがToast最適だと思います。初めて割り当てて、更新してsetText再表示するだけです。キャンセルするインスタンスは1つしかないため、キャンセルは期待どおりに機能します。

if (showToastMessage != null) {
    showToastMessage.setText("New Toast message");
    showToastMessage.show();
} else {
    showToastMessage = Toast.makeText(showString.this,"First Toast message",Toast.LENGTH_LONG);
    showToastMessage.show();
}
于 2013-01-15T05:47:23.313 に答える
0

最終的な結論は: Toast in Que can't be stop. です。そのため、que で toast を使用しないでください。

于 2013-02-15T09:07:52.097 に答える
0

handlerとを持つ独自のシングルトン クラスを作成しますLooperThread。その中にランナブルを作成するようなメソッドshowText(text, duration)を作成します。

その実行メソッドで、テキストで Toast のオブジェクトを作成し、その後ハンドラーに投稿します。

ルーパー スレッドは、ハンドラーが null かどうかを確認するコードを実装し、yes の場合はそれを作成します。

この方法では、トースト メッセージを生成するたびに、キューに並ぶのではなく、UI ですぐに更新されます。

于 2013-01-15T07:01:04.933 に答える