2012-12-11 36 views
1

我在模塊中有一系列Toast消息,每次用戶按下按鈕時都會顯示Toast。爲了減少排隊時間,我只是將該值傳遞給該方法,以便它不會結束預定的持續時間。定製烤麪包不適用於ICS

像這樣:

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(); 

} 

我的問題是這樣的代碼工作完全在薑餅和更低的Android版本。 但它不適用於ICS和果凍豆?

有什麼問題?

+4

也許涉及到'取消()'前'顯示()'? – ryanbwork

回答

4

問題出在你撥打的Toast.cancel()。我相信,蜂窩之前,cancel()只有如果它已經顯示藏起來。然而,在後來的實現,它有以下行爲(重點是我的):

關閉視圖,如果它顯示,或沒有表現出來,如果它沒有顯示尚未

你會希望new Toast()之前將呼叫轉移到cancel()到(當然,檢查它是否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(); 

} 
+0

謝謝埃裏克,它工作,但我仍然困惑以前的代碼如何工作姜麪包? – Vivek

+0

@NewMotive正如我所說,我認爲在薑餅和更低,行爲僅限於*只* *「如果它顯示關閉視圖」;也就是說,在舊的實現中,在調用show()之前'cancel()'沒有效果。 – Eric

+0

@Eric我運行了你的代碼,但沒有烤麪包。請幫助我在這裏 – kAnNaN