1

ユーザーがボタンを押すたびToastに表示されるモジュールに一連のメッセージがあります。Toastキューイング時間を短縮するために、メソッドに値を渡すだけで、スケジュールされた期間が終了するまで終了しません。

このような:

dt("on button press");


private void dt(final String message) {

    TextView text = (TextView) layout.findViewById(R.id.totext);

    toast = new Toast(getApplicationContext());

    toast.setGravity(Gravity.BOTTOM, 0, 0);
    toast.setDuration(Toast.LENGTH_SHORT);
    toast.setView(layout);
    toast.cancel();
    text.setText(message);
    text.setTextSize(16);

    toast.show();

}

私の問題は、このコードが Gingerbread および Android の下位バージョンで完全に機能することです。しかし、ICS と Jelly Bean では動作しませんか?

どうしたの?

4

1 に答える 1

4

問題は、Toast.cancel()あなたが呼び出しているものにあります。ハニカムが登場する前は、すでに表示されている場合にcancel() のみ非表示にしていました。ただし、後の実装では、次の動作があります (強調は私のものです)。

ビューが表示されている場合は閉じ、まだ表示されていない場合は表示しないでください。

cancel()への呼び出しをの前に移動する必要がありますnew Toast()(もちろん、それがnull最初かどうかを確認してください):

private void dt(final String message) {

    TextView text = (TextView) layout.findViewById(R.id.totext);

    if (toast != null) {
        toast.cancel(); // Move me here!
    }
    toast = new Toast(getApplicationContext());

    toast.setGravity(Gravity.BOTTOM, 0, 0);
    toast.setDuration(Toast.LENGTH_SHORT);
    toast.setView(layout);
    text.setText(message);
    text.setTextSize(16);

    toast.show();

}
于 2012-12-11T19:10:01.580 に答える