2011-09-07 28 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)