10

ここでこの種の問題について読みましたが、答えが機能していないようです。

Toastユーザーがボタンをクリックすると表示されます。ユーザーがボタンを連続してクリックすると、ユーザーがアクティビティを終了しても、トーストが何度も表示され続けます。

トーストの長さは短め。テキストが長いため、トーストの長さは変更できません。

これは私が今試したことです:

    Toast toast;
    toast=Toast.makeText(getApplicationContext(),"text",Toast.LENGTH_SHORT);
    if(toast.getView().isShown()==false){
         toast.show();
    }

これはうまくいきませんでした。

私は試した :

    if(toast.getView().isShown()==true){            
        toast.cancel();
    }

onStop()。何らかの理由で cancel メソッドが機能しません。

.cancel()アプリを表示する前に...を配置すると、別のnullチェックが行われます。しかし、それを行った後もうまくいきませんでした。トーストの代わりにダイアログ ボックスを表示できますが、それは解決策にはなりません。

トーストが表示されているかどうかを確認する方法はありますか?

参考のため

4

4 に答える 4

5

トーストをキャンセルする代わりに。テキストを変更します。例えば

        Toast t;

        t = Toast.makeText(this, "hi", 3000);
        t.show();

別のトーストが必要なときに使用します

        t.setText("bye");
        t.show();

トーストを閉じたい場合は、単に呼び出しますt.cancel()

于 2013-04-19T06:07:08.480 に答える
1

Toast オブジェクトで cancel() を呼び出すと、個々の Toast をキャンセルできます。ただし、未処理のトーストをすべてキャンセルする方法はありません。

于 2013-04-19T06:03:08.370 に答える
1

最後のトーストのタイムスタンプを保持し、タイムアウト期間が経過するまで新しいトーストを許可しないようにしてください。

何かのようなもの:

private static final long TOAST_TIMEOUT_MS = 2000; // tweak this constant

private static long lastToastTime = 0;

public void onButtonClicked() {
  long now = System.currentTimeMillis();
  if (lastToastTime + TOAST_TIMEOUT_MS < now) {
    Toast.makeText(...).show();
    lastToastTime = now;
  }
}

ユーザーがアプリを終了した後、トーストが 1 秒間表示されることは心配しません。これはごく標準的な動作です。

于 2013-04-19T06:04:26.983 に答える