刚刚开始涉足Android,并且被告知Strings不应该硬编码到Java中,而是放入字符串资源文件夹。
我有一个代码,在一个hashmap中,键和值都是字符串。我怎样才能将字符串放入xml并将它们完全从java部分中取出?
我应该只在字符串资源文件夹中创建一个字符串,如此
<string name="hello">Hello.world</string>
将hello作为键,将world作为值,然后使用the解析字符串。作为分隔符?
Hopefuly我已经正确地解释了自己
答案 0 :(得分:3)
您可以在res文件夹中定义许多其他资源类型。您可以看到可用的here和here。为了您的目的,一种方法可以是在res / values / arrays.xml中定义一个数组:
<resources>
<string-array name="hashmap">
<item>key1</item>
<item>value1</item>
<item>key2</item>
<item>value2</item>
<item>key3</item>
<item>value3</item>
</string-array>
</resources>
并在代码中:
Resources res = this.getResources();
String[] hashmapData = res.getStringArray(R.array.hashmap);
HashMap<String, String> map = new HashMap<String, String>();
for(int i=0; i<hashmapData.length; i=i+2) {
map.put(hashmapData[i], hashmapData[i+1]);
}
答案 1 :(得分:1)
这实际上取决于你使用它的原因。 “仅包含XML中的字符串”教条很棒,但它确实适用于您用于用户输出的字符串,因此,如果您想要翻译应用程序,则可以轻松更改它们。如果您使用键/值对进行内部工作,则无需使用。
如果确实涉及输出字符串,那么是的,这将是一个很好的方法。您还可以考虑将键和值拆分为两个XML节点 - 这实际上取决于您对它们的处理方式。
但总的来说,是的,就是这样。
答案 2 :(得分:0)
正确。你不应该在你的应用程序中硬编码字符串。这样做的原因是您可以非常轻松地在您的应用中支持本地化(多种语言)。您的字符串应全部放入/res/values/strings.xml
,然后如果您想支持西班牙语,那么这些字符串(具有相同的name=
值)将进入/res/values-es/strings.xml
。然后,要在xml中访问这些字符串,只需使用@string/hello
,在java中使用getString(R.string.hello)
。您可以在以下链接中找到更多信息:
答案 3 :(得分:0)
您有三个选项,因为没有官方支持键/值对
您已经使用过这种方法,但首先我建议使用字符串数组而不是字符串。这样您就可以将hashmap保存在一个位置。我建议使用随机unicode值而不是完全停止,因为这会降低分割字符串时的风险。
有2个字符串数组。第一个数组包含它们的键,第二个数组包含值。通常使用此方法,但您必须担心耦合/确保任何编辑都反映在两个字符串数组上。
这个基于数字2.你有一个键/值对的字符串数组,然后是一个包含数组的数组。您使用obtainTypedArray()获取“hashmap”,然后在for循环或其他内容中,使用TypedArray.getTextArray()返回单个String数组。这允许键和值的耦合。
&lt; string-array name =“hello_world”&gt; &LT;项目&GT;你好&LT; /项目&GT; &LT;项目&GT;世界&LT; /项目&GT; &LT; /串阵列&GT;
&lt; array name =“hashmap”&gt; &LT;项目&GT; @阵列/程序hello_world&LT; /项目&GT; &LT; /阵列
(请忽略可怕的格式化,stackoverflow似乎不适合xml)