如何从strings.xml中获取字符串值并进入arraylist [android]
在过去的一个小时里,我一直试图弄清楚这一点。
我想一般从strings.xml
得到字符串,并在我的代码,所以我可以动态更改字符串的数量,而无需更改我的代码中的任何东西,将它们加载到数组列表中。
到目前为止,我只有如何从strings.xml中获取字符串值并进入arraylist [android]
for(Field x :R.string.class.getFields())
if(x.getName().startsWith("ans"))
choices.add(/*what do I add here to get the string value from the field in to the arraylist */);
我想不出我的生活如何得到字符串值了现场的对象。我得到的所有内容都是Id(或者至少我认为是Id)或我在strings.xml
文件中分配的名称。
Resources res = getResources();
for(Field x :R.string.class.getFields())
if(x.getName().startsWith("ans")){
int id = x.get(null);
choices.add(res.getString(id));
}
创建RES/XML文件夹中的XML文件的example.xml
<?xml version="1.0" encoding="utf-8"?>
<data>
<record name="foo" />
</data>
然后分析它如下图所示
XmlResourceParser xrp = context.getResources().getXml(R.xml.example);
try {
int eventType = xrp.next();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG && xrp.getName().equalsIgnoreCase("record")) {
String name = xrp.getAttributeValue(null, "name");
//choices.add(name);
}
eventType = xrp.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
这太费力了。我想用反射。 Faylons的回答是我的需求的正确解决方案。 –
你可以试试这个:
choices.add(getResources().getString(R.string.string1));
string1是strings.xml中的字符串常量
不够通用。我想从一个循环中添加,而不是从一堆添加硬编码的add()语句中添加,这会导致维护问题。 –
是的,只是不得不改变x.get(null)并将其作为一个整数和环绕一个尝试,赶上 但这是我渴望的正确解决方案。 –
有人请这个。 –
try {choices.add(res.getString((Integer)x.get(null))); } //这获取ID,然后抓住相关 \t \t \t \t \t \t \t \t赶上(抛出:IllegalArgumentException E){e.printStackTrace()的资源;} \t \t \t \t赶上(IllegalAccessException E){e.printStackTrace ();} \t} –