2012-02-05 53 views
3

我有一个名为MyPrimaryClass的类,这个类在按下时有一个按钮,用类myClassForResult创建一个Intent。来自资源字符串的Toast.makeText

我使用它来启动它:

startActivityForResult(myIntentOfMyClassForResult, ACTIVITY_EDIT_BTEXT); 

两个MyPrimaryClass和myClassForResult延伸活动。

因此,当我在myClassForResult中调用Toast.makeText时,使用R.string.my_resource_string的文本参数,它给了我强制关闭!

我曾尝试这样的:

Context c = myClassForResult.this; 
Toast toast = Toast.makeText(c, 
    c.getResources().getString(R.string.my_resource_string), 
    Toast.LENGTH_SHORT); 
toast.show(); 

同样在此:C = getApplicationContext()

同样在此:C = getBaseContext()

同样在此:

Context c = MyPrimaryClass.this; 
Toast toast = Toast.makeText(c, 
    R.string.my_resource_string, 
    Toast.LENGTH_SHORT); 
toast.show(); 

如果我使用内联字符串,比如“My Toast Text!”,它就可以工作。但我需要从资源中获取一个字符串。

- 问题解决:

为了解决我改变了敬酒的持续时间Toast.LENGTH_LONG

字符串R.string.my_resource_string值是问题“的标题为空”

当我将它的值更改为“The title”时,它工作正常,所以我猜这个字符串Toast.LENGTH_SHORT持续时间太长。

但是,当我将持续时间更改为Toast.LENGTH_LONG时,我可以使用长字符串。

Context c = MyPrimaryClass.this; 
Toast toast = Toast.makeText(c, 
    R.string.my_resource_string, 
    Toast.LENGTH_LONG); 
toast.show(); 
+1

发布强制关闭的logcat错误。 – JoxTraex 2012-02-05 20:28:54

+0

这是logcat错误: android.content.res.Resources $ NotFoundException:String资源ID#0x7f04000a – DMF 2012-02-05 20:36:50

+0

你能解释为什么你要使用这两个类的意义? – JoxTraex 2012-02-05 20:38:25

回答

2

有一点需要注意:

Toast toast = Toast.makeText(c, 
    c.getResources().getString(R.string.my_resource_string), 
    Toast.LENGTH_SHORT); 
toast.show(); 

可以简化为:

Toast.makeText(c, 
    c.getResources().getString(R.string.my_resource_string), 
    Toast.LENGTH_SHORT).show(); 

这样可以节省你,你做的不是一个对象引用需要。

你需要明白的一件事是,只要你在包中引用了R(而不是android.R),只要你有上下文,就可以访问你的资源。

更新

意识到你正在使用这个,因为我会建议您 改变你的方法,而这其实可能什么后,你的做法是不理想的东西那么简单。

startActivityForResult(xx)方法通常是当你想启动一个应用程序在你的包之外的结果。

例如:如果我想获取从产品的条形码,然后我会通过一个动作开始的意图到条码类,间接。然后我会通过使用onActivityResult(xx)检索数据。

它使无意识为您自己的类做到这一点。

+0

这不是答案的人! – iTurki 2012-02-05 20:37:20

+0

我的答案在底部提供。 – JoxTraex 2012-02-05 20:39:13

+0

我有点知道它,但我正在学习Android编程,所以我试图发布一个简单的代码,避免做一些noob错误:) – DMF 2012-02-05 20:39:17

3

尝试:

Toast.makeText(this, this.getString(R.string.my_resource_string), Toast.LENGTH_SHORT); 
+1

**这**无效,导致代码是在** View.OnClickListener ** – DMF 2012-02-05 20:31:25

+0

获取对MyPrimaryClass的引用并使用MyPrimaryClass.getString(R.string.my_resources_string) – ab11 2012-02-05 20:43:07

+0

我这样做了: 上下文c = MyPrimaryClass.this; 然后c.getString(R.string.my_resources_string) – DMF 2012-02-05 20:45:14

0
Toast.makeText(getApplicationContext(), getApplicationContext().getResources.getString(R.string.imgval), Toast.LENGTH_SHORT).toShow(); 
0

@dilipkaklotar答对,但需要做一些改动:

这是怎样的工作对我来说

Toast.makeText(getApplicationContext(), 
getApplicationContext().getResources().getString(R.string.message), 
Toast.LENGTH_SHORT).show(); 

的getResources没有括号()。 ,最后是.show();不要显示()。

但它是正确的。所以非常感谢你。