2011-09-07 58 views
7

我的代碼是:安卓:Java的:在吐司使用字符串資源

public static void ToastMemoryShort (Context context) { 
    CharSequence text = getString(R.string.toast_memoryshort); //error here 
    Toast.makeText(context, text, Toast.LENGTH_LONG).show(); 
    return; 
    } 

但我發現了「不能讓一個靜態引用從類型上下文的非靜態方法的getString(INT) 「在Eclipse中。我試圖讓準備本地化我的應用程序(讓所有的硬編碼字符串到資源),所以我哪裏有:

getString(R.string.toast_memoryshort) 

我以前這是一個硬編碼字符串的罰款。

我不確定這裏發生了什麼(Java noob)。任何人都可以啓發我嗎?

非常感謝

巴茲

回答

2

只要用這個代替:

makeText(上下文的背景下,INT渣油,INT持續時間)做一個標準 只包含文本視圖和來自資源的文本。

http://developer.android.com/reference/android/widget/Toast.html

+0

非常感謝Stefan,完美。 – Barry

+0

實際上,它是你的答案和Rasel的組合:在結尾需要.show,在資源ID:Toast.makeText(上下文,R.string.toast_memoryshort,Toast.LENGTH_LONG)之前不需要Rasel的「+」 。顯示();所以對Rasel也是+1。非常感謝。 – Barry

+0

是的,當然.show()是需要的:) –

16

更改爲

public static void ToastMemoryShort (Context context) { 

     Toast.makeText(context, context.getString(R.string.toast_memoryshort), Toast.LENGTH_LONG).show(); 
     return; 
     } 
+0

感謝RASEL實現,見上面。 – Barry

+0

這個答案如此受歡迎的原因是,首先使用'getString'表明字符串本身由於某種原因需要(var注入,格式化等)。另外,它實際上解決了有問題的例外,這是一個真正的價值。 – tishma

2

你可以讓你的麪包更通用這樣的:

public void toast(String msg){ 
    Context context = getApplicationContext(); 
    CharSequence text = msg; 
    int duration = Toast.LENGTH_SHORT; 

    Toast toast = Toast.makeText(context, text, duration); 
    toast.show(); 
} 

然後,當你需要這樣只要致電:

toast("My message hardcoded"); 

或使用strngs.xml像這樣:

toast(this.getString(R.string.toast_memoryshort)); 
0

你應該改變

CharSequence text = getString(R.string.toast_memoryshort); //error here 

爲:

CharSequence text = context.getString(R.string.toast_memoryshort); 

getString功能在Context#getString(int)