3

我有一个名为 MyPrimaryClass 的类,该类在按下时有一个按钮女巫,它使用 myClassForResult 类创建一个 Intent。

我用它来启动它:

startActivityForResult(myIntentOfMyClassForResult, ACTIVITY_EDIT_BTEXT);

MyPrimaryClass 和 myClassForResult 都扩展了 Activity。

因此,当我在 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();

如果我使用内联字符串,例如“我的吐司文本!”,它就可以工作。但我需要从资源中获取一个字符串。

-问题解决了:

为了解决这个问题,我将 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

4 回答 4

3

尝试:

Toast.makeText(this, this.getString(R.string.my_resource_string), Toast.LENGTH_SHORT);
于 2012-02-05T20:30:32.837 回答
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.)时,只要您有 Context,您就可以访问您的资源。

更新

在意识到你使用它的目的之后,我建议你改变你的方法,虽然这实际上是可能的,但你的方法对于如此简单的事情并不理想。

startActivityForResult(xx) 方法通常是在您想要启动包外部的应用程序以获得结果时使用的。

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

为您自己的课程这样做是没有意义的。

于 2012-02-05T20:35:08.887 回答
2

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

这就是它对我有用的方式

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

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

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

于 2015-11-02T03:44:36.683 回答
0
Toast.makeText(getApplicationContext(), getApplicationContext().getResources.getString(R.string.imgval), Toast.LENGTH_SHORT).toShow();
于 2012-02-06T05:58:09.103 回答