Android toast中的变量/资源串联不起作用

Android toast中的变量/资源串联不起作用,android,concatenation,toast,Android,Concatenation,Toast,这项工作: Toast.makeText(getApplicationContext(), attemptsRemainingCount.toString(), Toast.LENGTH_LONG).show(); Toast.makeText(getApplicationContext(), R.string.attemptsRemaining, Toast.LENGTH_LONG).show(); 这项工作: Toast.makeText(getApplicationContext(),

这项工作:

Toast.makeText(getApplicationContext(), attemptsRemainingCount.toString(), Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), R.string.attemptsRemaining, Toast.LENGTH_LONG).show();
这项工作:

Toast.makeText(getApplicationContext(), attemptsRemainingCount.toString(), Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), R.string.attemptsRemaining, Toast.LENGTH_LONG).show();
但是,这不起作用:

Toast.makeText(getApplicationContext(), attemptsRemainingCount.toString() + R.string.attemptsRemaining, Toast.LENGTH_LONG).show();

它给我的只是一个很长的数字。有人能告诉我这里的连接有什么问题吗?

您正在用资源标识符连接java变量

尝试使用以下命令:

Toast.makeText(getApplicationContext(),attemptsRemainingCount.toString()+getResources().getString(R.string.attemptsRemaining),Toast.LENGTH_LONG.show()


您正在将java变量与资源标识符连接起来

尝试使用以下命令:

Toast.makeText(getApplicationContext(),attemptsRemainingCount.toString()+getResources().getString(R.string.attemptsRemaining),Toast.LENGTH_LONG.show()


第一个示例是使用
CharSequence
,它依次调用
CharSequence
版本的
makeText

第二个示例是使用
resId
或链接资源id版本:

这就解释了为什么这两个例子有效

你想要的是两者的结合。这意味着您需要将链接的资源id转换为
字符串
,然后连接它并使用
CharSequence
方法。例如,像这样:

Toast.makeText(getApplicationContext(), 
    attemptsRemainingCount.toString() + 
    getResources().getString(R.string.attemptsRemaining), 
    Toast.LENGTH_LONG).show();

第一个示例是使用
CharSequence
,它依次调用
CharSequence
版本的
makeText

第二个示例是使用
resId
或链接资源id版本:

这就解释了为什么这两个例子有效

你想要的是两者的结合。这意味着您需要将链接的资源id转换为
字符串
,然后连接它并使用
CharSequence
方法。例如,像这样:

Toast.makeText(getApplicationContext(), 
    attemptsRemainingCount.toString() + 
    getResources().getString(R.string.attemptsRemaining), 
    Toast.LENGTH_LONG).show();

前两行看起来可能相同,但它们将使用不同的重载版本的
Toast.makeText
。第一个使用(因为给了它一个字符串),而第二个使用(因为给了它一个整数资源id)

将字符串与资源id(数字)连接仍然会生成字符串,但资源id会转换为字符串

相反,您应该将字符串资源转换为格式字符串(
您还有%1$d次尝试)
)并使用:

获取格式化字符串。有关详细信息,请参阅中的
格式化字符串部分


与简单地将数字与固定字符串连接相比,在字符串资源中格式化字符串的优点是前者可以轻松地翻译成其他语言,而数字可能不在同一位置。

前两行看起来可能相同,但它们将使用不同的重载版本的
Toast.makeText
。第一个使用(因为给了它一个字符串),而第二个使用(因为给了它一个整数资源id)

将字符串与资源id(数字)连接仍然会生成字符串,但资源id会转换为字符串

相反,您应该将字符串资源转换为格式字符串(
您还有%1$d次尝试)
)并使用:

获取格式化字符串。有关详细信息,请参阅中的
格式化字符串部分


在字符串资源中格式化字符串比简单地将数字与固定字符串连接的优势在于,前者可以轻松地翻译成其他语言,而数字可能不在同一位置。

啊,是的,这很有意义。谢谢你的建议。:)啊,是的,这很有意义。谢谢你的建议。:)