我一直在使用「myToast」,我使用「myToast.cancel();在發佈新的Toast之前,對於Android v2.3及更高版本,這很有用。新的吐司需要發送,舊的,如果仍然在屏幕上,被取消(並立即消失),以新的吐司替代。這避免堆疊一堆吐司,如果用戶多次按下一個鍵需要(或其他條件),我的實際情況是當按下錯誤的按鍵時出現一個烤麪包,如果沒有按下清除鍵,則出現另一個烤麪包如何防止多次吐司重疊
對於Android 4.0和4.1,發出myToast.cancel()在下一個吐司殺死當前和下一個吐司之前,當前的cancel()API確實表明它取消了當前和下一個吐司(這看起來相當愚蠢)。爲什麼要取消你想要舉辦的祝酒?
關於在Android版本(以及它在v2.3及更舊版本中的工作方式)中一致地取消工作的任何想法?
我會嘗試一些不雅的雙烤麪包系統,跟蹤哪個烤麪包正在使用,但看起來這樣的痛苦在4.x中解決這個不良行爲,以便在老版本的Android版本中得到完美和邏輯的效果。
好吧,我解決了它,但它幾乎沒有我所希望的那麼幹淨。我實施了雙烤麪包方法,在兩面烤麪包之間切換。首先,我們之前的OnCreate定義敬酒的活動:
Toast toast0;
Toast toast1;
private static boolean lastToast0 = true;
在OnCreate:
toast0 = new Toast(getApplicationContext());
toast0.cancel();
toast1 = new Toast(getApplicationContext());
toast1.cancel();
最後,當我需要顯示敬酒,並在同一時間取消了之前敬酒我使用類似的東西:
if (lastToast0) {
toast0.cancel();
toast1.setDuration(Toast.LENGTH_LONG);
toast1.setText("new message");
toast1.show();
lastToast0 = false;
} else {
toast1.cancel();
toast0.setDuration(Toast.LENGTH_LONG);
toast0.setText("new message");
toast0.show();
lastToast0 = true;
}
如果您只是需要取消現有吐司(超時之前)使用方法:
toast0.cancel();
toast1.cancel();
在Nexus 7(4.1),Emulator 4.0和幾款採用Android 2.2,2.3的設備上測試。
你是如何取消舊吐司?在做新的之前或之後? – TheZ
你可以發佈你的代碼在哪裏做烘烤? – Ralgha
我在新的版本之前取消了它 - 這就是爲什麼Android 4.x隱藏新版本是如此奇怪(但是用於吐司的API會取消某種解釋將會發生)。我編輯了一個我創建的解決方案。只是不太好看。 – Frank