首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android是否可以在XML文件中定义地图?

Android是否可以在XML文件中定义地图?
EN

Stack Overflow用户
提问于 2012-04-18 01:24:45
回答 5查看 23.3K关注 0票数 24

我试图定义一个利用资源的静态哈希表,但由于不可能静态地访问资源而受阻。

然后我意识到定义静态映射最好的地方是资源文件本身。

如何在XML中定义映射?我认为,如果可能的话,它应该类似于Listpreference机制,具有条目和条目-值。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-18 02:09:13

如何在XML中定义映射?

代码语言:javascript
运行
复制
<thisIsMyMap>
  <entry key="foo">bar</entry>
  <entry key="goo">baz</entry>
  <!-- as many more as your heart desires -->
</thisIsMyMap>

将其放入res/xml/中,并使用getResources().getXml()加载它。遍历事件以构建HashMap<String, String>

票数 33
EN

Stack Overflow用户

发布于 2014-02-07 05:46:23

更简单的选择是使用两个数组。这样做的好处是不需要再次迭代xml文件,使用的代码更少,使用不同类型的数组也更直接。

代码语言:javascript
运行
复制
<string-array name="myvariablename_keys">
   <item>key1</item>
   <item>key1</item>
</string-array>

<string-array name="myvariablename_values">
   <item>value1</item>
   <item>value2</item>
</string-array>

那么你的java代码应该是这样的:

代码语言:javascript
运行
复制
String[] keys = this.getResources().getStringArray(R.array.myvariablename_keys);
String[] values = this.getResources().getStringArray(R.array.myvariablename_values);
LinkedHashMap<String,String> map = new LinkedHashMap<String,String>();
for (int i = 0; i < Math.min(keys.length, values.length); ++i) {
   map.put(keys[i], values[i]);
}
票数 40
EN

Stack Overflow用户

发布于 2015-03-10 06:04:48

你总是可以在你的strings.xml文件中嵌入Json:

res/values/strings.xml

代码语言:javascript
运行
复制
<string name="my_map">{"F":"FOO","B":"BAR"}</string>

在你的活动中,你可以在onStart方法中构建你的地图:

代码语言:javascript
运行
复制
private HashMap<String, String> myMap;

@Override
protected void onStart() {
    super.onStart();
    myMap = new Gson().fromJson(getString(R.string.my_map), new TypeToken<HashMap<String, String>>(){}.getType());
}

这段代码需要Google Gson API才能运行。您可以使用Android SDK中内置的Json API来完成此操作。

至于静态访问Map,您可以创建一个静态方法:

代码语言:javascript
运行
复制
private static HashMap<String, String> method(Context context) {
    HashMap<String, String> myMap = new Gson().fromJson(context.getString(R.string.serve_times), new TypeToken<HashMap<String, String>>(){}.getType());
    return myMap;
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10196015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档