一尘不染

Android资源-数组数组

java

我正在尝试实现一种资源数据结构,其中包括一个数组数组,尤其是字符串。我遇到的问题是如何获取子数组对象及其特定值。这是我的资源文件的样子。

<resources>
   <array name="array0">
     <item>
       <string-array name="array01">
         <item name="id">1</item>
         <item name="title">item one</item>
       </string-array>
     </item>
     <item>
       <string-array name="array02">
         <item name="id">2</item>
         <item name="title">item two</item>
       </string-array>
     </item>
     <item>
       <string-array name="array03">
         <item name="id">3</item>
         <item name="title">item three</item>
       </string-array>
     </item>
   </array>
</resources>

然后,在我的Java代码中,我检索数组并尝试像这样访问子元素…

TypedArray typedArray = getResources().obtainTypedArray(R.array.array0);

TypedValue typedValue = null;

typedArray.getValue(0, typedValue);

在这一点上,typedArray对象应该表示字符串数组“ array01”,但是,我看不到如何检索“ id”和“
title”字符串元素。任何帮助将不胜感激,在此先感谢。


阅读 197

收藏
2020-09-08

共1个答案

一尘不染

您几乎可以做您想做的。您必须分别声明每个数组,然后声明一个引用数组。像这样:

<string-array name="array01">
    <item name="id">1</item>
    <item name="title">item one</item>
</string-array>
<!-- etc. -->
<array name="array0">
    <item>@array/array01</item>
    <!-- etc. -->
</array>

然后在您的代码中执行以下操作:

Resources res = getResources();
TypedArray ta = res.obtainTypedArray(R.array.array0);
int n = ta.length();
String[][] array = new String[n][];
for (int i = 0; i < n; ++i) {
    int id = ta.getResourceId(i, 0);
    if (id > 0) {
        array[i] = res.getStringArray(id);
    } else {
        // something wrong with the XML
    }
}
ta.recycle(); // Important!
2020-09-08