Toast
タブから別のタブに切り替えるときにa を「削除」しようとしているので、フォーカスされたタブのアクティビティを一時停止すると仮定します。基本的に、cancel メソッドを単一のToast
オブジェクトに適用するか、null に割り当てることができます。これは機能します。
ポイントは、TextView を使用して Toast をスレッド化すると、スレッドを停止しても Toast が引き続き表示されることです。この時点からToast をスレッド化し、 this oneに従って停止しようとしました。
スレッドを停止してシステム キューからトーストを削除する方法、またはその目標を達成するためのより良い解決策がありますか (たとえば、1 つのアクティビティで複数のトースト、アクティビティから別のアクティビティに切り替えるときにトーストの表示を停止するなど)?
トーストを呼び出す (これで問題ありません):
private void showSingleToast(String toastText, int color, long duration_ms) {
if (mySingleToast instanceof Toast) {
mySingleToast.setText(toastText);
if (null != toastView)
if (toastView instanceof TextView)
toastView.setTextColor(color);
ToastExpander.showFor(mySingleToast, duration_ms);
}
}
Toast.show() のスレッド化
public class ToastExpander extends Thread {
public static final String TAG = "ToastExpander";
static Thread t;// = null;
// Must be volatile:
static volatile boolean stopFlag = false;
static long scan_freq = 300;
public static void showFor(final Toast aToast, final long durationInMilliseconds) {
aToast.setDuration(Toast.LENGTH_SHORT);
t = new Thread() {
long timeElapsed = 0l;
public void run() {
try {
while (timeElapsed <= durationInMilliseconds || !stopFlag) {
long start = System.currentTimeMillis();
aToast.show();
sleep(scan_freq);
timeElapsed += System.currentTimeMillis() - start;
}
// doesn't work: aToast.cancel();
} catch (InterruptedException e) {
Log.e(TAG, e.toString());
}
} /* end of "run" */
}; /* end of Thread */
t.start();
} /* end showFor */
public static void cancel() {
stopFlag = true;
}
}
トーストを「削除」しようとしています(機能しません)
private void hideSingleToast() {
//hideTextView(toastView);
toastView = null;
ToastExpander.cancel();
mySingleToast.cancel();
//mySingleToast= null;
}