这有效:
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();
你的第一个例子是使用CharSequence
,而CharSequence
又调用makeText
版本的makeText(Context context, CharSequence text, int duration)
:
resId
而你的第二个例子是使用makeText(Context context, int resId, int duration)
或链接资源id版本:
String
这就解释了为什么这两个例子有效。
你想要的是两者的结合。这意味着您需要将链接的资源ID转换为CharSequence
,然后将其连接并使用Toast.makeText(getApplicationContext(),
attemptsRemainingCount.toString() +
getResources().getString(R.string.attemptsRemaining),
Toast.LENGTH_LONG).show();
方法。例如,像这样:
Toast.makeText
前两行可能看起来相同,但它们将使用不同的the CharSequence
version重载版本。第一个使用the int version(因为它被赋予一个字符串),而第二个使用You have %1$d attempts left
(因为它被赋予一个整数资源id。
将字符串与资源ID(数字)连接仍会产生字符串,但资源ID转换为字符串。
相反,你应该将字符串资源变成格式字符串(getResources().getString(R.string.attemptsRemaining, attemptsRemainingCount);
)并使用:
Formatting strings
获取格式化的字符串。有关详细信息,请参阅the string resources documentation中的qazxswpoi部分。
字符串资源中的格式字符串优于简单地将数字与固定字符串连接在一起的优点是,前者可以很容易地翻译成其他语言,其中数字可能不在同一个地方。