2010-12-09 100 views
22

我開發了一個android應用程序,我面臨的問題是Toast。 假設我正在顯示一個Toast,它會顯示在應用程序窗口中。 當出現對話框時,烤麪包不會立即消失。如何取消Toast

我想知道如何取消敬酒。

+0

備份@EboMike [在他的回答中說過](http://stackoverflow.com/a/4395089/383414),我已經成功地使用了我的'Boast.java`的最後一個要點幾年 - [Github上的Boast.java](https://gist.github.com/mobiRic/9786993) – 2016-08-16 20:55:25

回答

41

Toast.makeText返回Toast對象。請撥打cancel()以取消該對象。

+1

感謝兄弟們的歡呼聲,Kariyachan – DroidBot 2010-12-09 07:22:11

+1

沒問題!祝你的程序好運! – EboMike 2010-12-09 07:22:22

+0

@EboMike這是如何實現的?你能詳細說明嗎?我是新開發的。 – 2013-03-29 03:41:32

5

您可以爲烤麪包指定的最短時間爲Toast.LENGTH_SHORT,其值爲0,但實際上爲2000 milliseconds long。如果你想要比它短,那麼試試這個:

final Toast toast = Toast.makeText(ctx, "This message will disappear in 1 second", Toast.LENGTH_SHORT); 
    toast.show(); 

    Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       toast.cancel(); 
      } 
    }, 1000); //specify delay here that is shorter than Toast.LENGTH_SHORT 
0

使用tost:toast.cancel()的取消方法;

4

我認爲沒有必要創建一個自定義的烤麪包。

僅創建Toast類的單個實例。我們只需使用toast.setText("string")來設置烤麪包的文本,然後在onDestroy()方法中調用toast.cancel()方法。

工作的代碼片段如下:

package co.toast; 

import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 

public class ShowToastActivity extends Activity { 
    private Toast toast = null; 
    Button btnShowToast; 

    @SuppressLint("ShowToast") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // creates only one toast object.. 
     toast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG); 

     btnShowToast = (Button) findViewById(R.id.btnShowToast); 

     btnShowToast.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       // only set text to toast object.. 
       toast.setText("My toast!"); 
       toast.show(); 
      } 
     }); 
    } 

    @Override 
    protected void onDestroy() 
    { 
     toast.cancel(); 
     super.onDestroy(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     toast.cancel(); 
    } 
} 

希望這對您有所幫助..

0

這是使用Toastcancel()方法一個基本的例子。

Toast mytoast; 
mytoast = Toast.makeText(getApplicationContext(), "Hi Ho Jorgesys! ", Toast.LENGTH_LONG); 
mytoast.show(); 
.... 
.... 
.... 
if(CancelToast){ 
    mytoast.cancel(); 
} 
-1

好吧,我也正在嘗試取消敬酒,似乎並不能得到 取消()調用無論是在Activity.onDestroy(到被調用) 或Activity.onStop()等。在一些API文檔閱讀和 谷歌搜索其他需要獲取幫助獲取Toasts取消, 我想我仍然不清楚活動何時停止, 暫停,銷燬。我需要一種絕對的方式來強制我的活動 暫停或停止。

在我的具體情況,因爲只有短期和長期 時間敬酒,我決定來迭代循環5次,持續時間長麪包做 秀(),所以它會留在屏幕上 爲15-20秒。這工作正常!使用吐司對象 的

但是,其缺點(負面效應)是他們堅持,即使在用戶放棄您的應用程序和 回到主屏幕,並使用一些其他的應用程序啓動...您的 除非你可以保證你可以找到某個地方(某種方式)到 調用cancel(),否則你會在接下來的15-20秒內活着。另外,您必須相信Android會將 尊敬您的電話取消()!因此,爲此,我一直在調整我的簡單循環,試圖 在循環中調用取消,並向我自己證明它會致電取消調用,並在視覺上表現得如預期一樣。

代碼片段: 注:「敬酒」是一個公共實例變量,所以我們 有吐司對象只有一個實例[如上述 建議,以及一個評論者證實 正在兩年前,在活動onStop()和OnDestroy()]

toast = Toast.makeText(ctxt, result, Toast.LENGTH_LONG); 
    for (int i=0; i < 5; i++) 
    { 
     // Long-toasts each last about 3.5 secs 
     toast.show(); 

     android.os.SystemClock.sleep(1500); 
     toast.cancel(); 
     android.os.SystemClock.sleep(1500); 
     toast = Toast.makeText(ctxt, result, Toast.LENGTH_LONG); 
    } 

好吧,原始循環只包含一行演出。 這是有效的,本身。

但是做實驗,我說那接下來的四線,約 一半通3.5秒顯示睡覺,然後取消它,又睡了 了一秒半,然後重新創建和顯示再次敬酒。

我期望看到的祝酒約1.5秒,然後看它消失, 而在另一個1.5秒回來,等

猜猜是什麼......乾杯永遠不會出現在所有!

好吧,我完全嘟嘟... ... ...我錯過了什麼,在 瞭解如何執行烤麪包類 和應該表現的內在奧祕?

回到我的第一個問題:如何最好地讓我的 活動進入暫停或停止狀態?

[注意:我很喜歡這個論壇,很棒!這是我第一次發帖 進入討論的中間...抱歉,我的回覆 被標記爲答案,而不是作爲與此主題相關的 的問題。 ]

0
Toast toast; 

private void showToast(String text) { 
    if (toast!=null) 
     toast.cancel(); 
    toast = Toast.makeText(context, text, Toast.LENGTH_SHORT); 
    toast.show(); 
}