资源字符串中的Toast.makeText

时间:2012-02-05 20:27:12

标签: android toast android-resources

我有一个名为MyPrimaryClass的类,这个类在按下时有一个按钮,用类myClassForResult创建一个Intent。

我用它来启动它:

startActivityForResult(myIntentOfMyClassForResult, ACTIVITY_EDIT_BTEXT);

MyPrimaryClass和myClassForResult都扩展了Activity。

所以,当我在myClassForResult中使用文本参数R.string.my_resource_string调用Toast.makeText时,它会让我强制关闭!

我试过这个:

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的持续时间更改为Toast.LENGTH_LONG

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

当我将其值更改为“标题”时,它工作正常,所以我猜这个字符串对于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();

4 个答案:

答案 0 :(得分:3)

尝试:

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

答案 1 :(得分: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)通常是在您希望启动包外的应用程序以获取结果时。

例如:如果我想从产品中检索条形码,那么我会通过动作启动对该条形码类的Intent,间接。然后我通过使用onActivityResult(xx)检索数据。

使 No Sense 为您自己的课程执行此操作。

答案 2 :(得分:2)

@dilipkaklotar已正确回答但需要进行一些更改:

这是我的工作方式

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

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

但这是正确的。非常感谢你。

答案 3 :(得分:0)

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