【问题标题】:Are "strings.xml" string arrays always parsed/deserialized in the same order?“strings.xml”字符串数组是否总是以相同的顺序解析/反序列化?
【发布时间】:2012-04-06 04:50:32
【问题描述】:

我可以指望“strings.xml”资源文件中的字符串数组以相同的顺序每次进行解析/反序列化吗?

如果有人可以引用任何明确说明此保证的文档,我将不胜感激。或者,至少,提供有关该主题的大量经验。

另外,这是最佳做法还是我错过了更简单的解决方案?

注意:这将是一个小列表,所以我不打算实现更复杂的数据库或自定义 XML 解决方案,除非我绝对必须这样做。

<!--KEYS (ALWAYS CORRESPONDS TO LIST BELOW ??)-->
<string-array name="keys">
    <item>1</item>
    <item>2</item>
    <item>3</item>
</string-array>

<!--VALUES (ALWAYS CORRESPONDS TO LIST ABOVE ??)-->
<string-array name="values">
    <item>one</item>
    <item>two</item>
    <item>three</item>
</string-array>

【问题讨论】:

  • 这个问题很难理解。字符串数组不属于 string.xml 而是属于 values.xml。对应关系,如果有的话,由程序员定义。你想完成的任务是什么?
  • 我没有“values.xml”文件。我的所有资源都在“res/values”文件夹中的“strings.xml”文件中定义。这工作得很好。我要确定的是我是否可以依靠始终对齐的键/值对(1/1、2/2、3/3 等)。如果“item”节点的反序列化是随机执行的,我不想围绕这个构建逻辑。

标签: android xml deserialization arrays android-resources


【解决方案1】:

是的,据我所知,您可以假设项目的顺序每次都是相同的,这意味着您可以使用单独的 xml 声明的数组安全地定义键/值对。查看 API 演示(例如 arrays.xml 文件),您会发现 Google 使用相同的方法来指定静态键/值对。更具体地说,您将能够从entries_list_preferenceentryvalues_list_preference 中推断出这一点。实际上,如果您考虑一下:提供entriesentryValues 属性来指向静态资源几乎没有意义,例如ListPreference 如果无法保证他们的订单。

附录:不支持 xml 中的多维数组。但是,您可以编写自己的 xml 解析器来处理这些情况,这实际上并不像听起来那么难。与简单地定义两个一维数组相比,这可能会花费您更多的时间。

【讨论】:

  • 谢谢!这正是我想要的。
猜你喜欢
  • 2011-04-12
  • 1970-01-01
  • 2016-06-07
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多