Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复数不能在android中正常工作_Android_String - Fatal编程技术网

复数不能在android中正常工作

复数不能在android中正常工作,android,string,Android,String,我使用android sdk提供的复数字符串。我使用以下代码创建了一个复数字符串: <plurals name="valuestr"> <item quantity="zero">Choose a value.</item> <item quantity="one">%d unit.</item> <item quantity="other">%d units.</it

我使用android sdk提供的复数字符串。我使用以下代码创建了一个复数字符串:

 <plurals name="valuestr">
        <item quantity="zero">Choose a value.</item>
        <item quantity="one">%d unit.</item>
        <item quantity="other">%d units.</item>
    </plurals>
当我设置除“0”以外的任何值时,这工作正常,但当我设置“0”时,它显示的是“0单位”。

请帮忙

更新

在互联网上搜索更多信息时,我遇到了一个使用
java.text.MessageFormat
类的解决方案:

<resources>
    <string name="item_shop">{0,choice,0#No items|1#One item|1&lt;{0} items}</string>
</resources>

您可以在

中阅读有关格式字符串的更多信息最近在G+上发布了一篇关于此的帖子。 简言之,这是因为它不会按整数(0=零)选择最接近的匹配项,而是因为它将查找语法最好的选择项

在您的示例中,使用单位。 正确的用法是:; 0个单位 1单位 2个单位

使得,0几乎等于1以上的任何其他量

在这里读完整的故事;

在资源文件的
部分中定义的复数仅用于单数/复数字符串的语法区别。您不应该像以前那样将它们用于其他显示逻辑。您应该在代码中添加一些检查逻辑

报告明确指出:

虽然历史上称为“数量字符串”(现在仍然称为 在API中),数量字符串只能用于复数。是的 使用数量字符串实现Gmail之类的东西是一个错误 例如,当存在未读邮件时,“收件箱”与“收件箱(12)” 例子。使用数量字符串而不是 一个if语句,但需要注意的是,某些语言(如 作为中国人)根本不做这些语法上的区别,所以 你总会得到另一根弦

在我看来,您的解决方案——虽然在技术上适合您当前的实现——也不像是一个干净的解决方案。未来的业务需求可能需要包含比仅显示不同文本更复杂的逻辑。或者,您的资源文件中可能有一个通用的“no items selected”字符串,用于不同的位置,只有在您不坚持使用解决方案的情况下,才能重用该字符串


通常,我会避免使用两种不同的格式化技术(String.format style formatter
%d
与MessageFormat style formatter
{0}
),并选择一种在整个应用程序中坚持使用的技术是一个常见的陷阱。问题还在于ADT接受它的语言不适用,例如在英语中。我会说这可能是因为您给它一个formatArgs(最后的0),它可能会过滤复数项,以仅保留那些需要格式args的。可能的重复
<resources>
    <string name="item_shop">{0,choice,0#No items|1#One item|1&lt;{0} items}</string>
</resources>
String fmt = resources.getText(R.string.item_shop);
textView.setText(MessageFormat.format(fmt, amount));