toast中的变量/资源连接不起作用

时间:2017-12-31 00:04:01

标签: 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(), attemptsRemainingCount.toString() + R.string.attemptsRemaining, Toast.LENGTH_LONG).show();

它给我的全部是一个很长的数字。有人可以告诉我这里连接的错误吗?

3 个答案:

答案 0 :(得分:2)

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

尝试使用以下内容:

  

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

答案 1 :(得分:0)

您的第一个示例是使用CharSequence,后者又会调用CharSequence版本的makeText

makeText(Context context, CharSequence text, int duration)

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

makeText(Context context, int resId, int duration)

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

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

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

答案 2 :(得分:0)

前两行可能看起来相同,但它们将使用Toast.makeText的不同重载版本。第一个使用the CharSequence version(因为它被赋予一个字符串),而第二个使用the int version(因为它被赋予一个整数资源ID。

将字符串与资源ID(数字)连接仍会产生字符串,但资源ID转换为字符串。

相反,您应该将字符串资源转换为格式字符串(You have %1$d attempts left)并使用:

getResources().getString(R.string.attemptsRemaining,  attemptsRemainingCount);

获取格式化的字符串。有关详细信息,请参阅the string resources documentation中的Formatting strings部分。

字符串资源中的格式字符串优于简单地将数字与固定字符串连接起来的优点是,前者可以很容易地翻译成其他语言,其中数字可能不在同一个地方。