2011-05-03 50 views
4

我在不同的Activities之間使用共享Toast,以便僅顯示最新消息,立即丟棄任何以前的消息。我把代碼中的自定義Application對象:Shared Toast未在Motorola Xoom的Android 3.0.1中顯示

public class GameApp extends Application { 
    private Toast mToast; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     mToast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_SHORT); 
    } 

    public void displayToast(int textId) { 
     displayToast(getText(textId)); 
    } 

    public void displayToast(CharSequence text) { 
     mToast.cancel(); 
     mToast.setText(text); 
     mToast.show(); 
    } 
} 

Toast表明了我的1.62.23.0模擬器。但是當我從市場下載發佈的應用程序時,它只顯示在我的G1(CyanMod 6.1)上,但不顯示Xoom(3.0.1)。我試圖用USB調試連接Xoom,但在LogCat中沒有任何相關內容。

在此之前,我用來做Toast S上的傳統方式(即通過Toast.makeText())和一切工作正常。

我的上面的代碼可能存在任何潛在的問題,或者這可能是Xoom中的錯誤?這裏是鏈接到my app,以防你想測試它。在主屏幕中單擊TodayProgress時應出現Toast。我感謝任何幫助。非常感謝你:)

+1

我在Xoom 3.1上遇到同樣的問題。任何人都可以證實這是一個錯誤? – vodkhang 2011-08-04 06:06:41

+0

@vodkhang:看起來這是因爲我誤解了Toast的API。而我的代碼恰巧適用於某些版本的Android,但不適用於其他版本。無論如何,感謝您開始這樣一個巨大的獎金! – Phil 2011-08-08 06:11:00

回答

2

我不知道,但摩托羅拉使用的SDK可能會有所不同..和mToast.cancel()可能是幹什麼什麼可怕的事情..所以你嘗試過這個..

public void displayToast(CharSequence text) { 

     mToast.setText(text); 
     mToast.show(); 
    } 
+0

原來這對我有用。謝謝ntc! – Phil 2011-08-08 06:03:37

+0

是的,因爲這是開源的,但是人們確實想要,可怕。所以我們應該嘗試一切可能的方法。快樂編碼... :) – ngesh 2011-08-08 06:21:45

2

這是因爲mToast.cancel();可能會關閉吐司,如果它顯示,或不顯示它,如果它沒有顯示。

請在用戶點擊按鈕時創建新的Toast對象。並保留以前的Toast對象引用。下次用戶單擊按鈕時,取消先前的Toast對象並再次創建新的Toast。

+0

謝謝杰特。原來我不應該叫'cancel()'。我誤解了一下API。 'show()'已經瞬間改變文本。 – Phil 2011-08-08 06:05:41

+0

但是如果有人重複多次按下「今日」,並且您不會在您的活動中取消之前的Toast,即使您離開活動,也會獲得許多Toast。 – 2011-08-08 07:10:39

+0

對不起,我不清楚。我的意思是從我的代碼中,我只需要刪除'mToast.cancel()'行。我在所有通話之間共享同一個Toast實例。 – Phil 2011-08-08 12:37:48

1
public class GameApp extends Application { 
    private Toast mToast; 
    private Context mContext; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     mToast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_SHORT); 
    } 

    public void displayToast(int textId,Context mContext) { 
     this.mContext = mContext; 
     displayToast(getText(textId)); 
    } 

    public void displayToast(CharSequence text) { 
     mToast.cancel(); 
     mToast = new Toast(mContext); 
     mToast.setText(text); 
     mToast.setDuration(Toast.LENGTH_SHORT); 
     mToast.show(); 
    } 
} 
+0

謝謝謝里夫。你的解決方案也很棒。但事實證明,我可以簡單地省略對'cancel()'的調用並獲得所需的效果。我想避免實例化新的Toast。 – Phil 2011-08-08 06:07:06