【问题标题】:Array in XML: insert one array into another as a partXML 中的数组:将一个数组作为一部分插入另一个数组
【发布时间】:2020-04-20 17:01:29
【问题描述】:

为我的 Android 应用程序准备字符串资源,我遇到了这样的问题。我需要两个包含 12 项和 13 项的字符串数组,前 11 项对于这两个数组都是通用的。创建包含 11 个常见项目的数组是一个好主意,然后创建两个所需的数组,其中包含来自“常见”数组的 11 个项目以及 1 个和 2 个附加项目。但是,我找不到办法做到这一点。可以引用一些 xml 资源,但在我的情况下,有必要分别包含每 11 个常见项目。

提前感谢您的任何想法

【问题讨论】:

  • 你用的是kotlin还是java?
  • 另外,你想在哪里获得对最终数组项的引用?
  • Natig Babayev,感谢您的回复。使用Java。创建 XML 时,我需要引用 XML 中的其他数组。 id est,这里是 xml string-array 共有 11 个项目,它是其他 2 个 string-array 的基础。
  • 你将如何处理另一个字符串数组?你打算从 Java 代码还是其他地方使用它?
  • Natig Babayev,感谢您的帮助。它是安卓应用程序。包含来自基本数组的 11 项的另外两个数组是 java 代码中 ArrayAdapter 的来源。

标签: android arrays xml


【解决方案1】:

在您的 XML 中,您可以将公共数组作为项目引用:

<resources>

    <string-array name="common_array">
        <item>name 1</item>
        <item>name 2</item>
        <item>name 3</item>
    </string-array>
    <string-array name="new_array">
        <item>@array/common_array</item>
        <item>name 4</item>
    </string-array>
</resources>

然后在您的 java 代码中,添加以下函数,将资源项转换为字符串列表:

List<String> getArrayItems(int resourceId, Resources resources) {
    ArrayList<String> itemList = new ArrayList<>();
    TypedArray typedArray = resources.obtainTypedArray(resourceId);

    for (int i = 0; i < typedArray.length(); i++) {
        int type = typedArray.getType(i);
        if (type == TypedValue.TYPE_STRING) {
            itemList.add(typedArray.getString(i));
        } else if (type == TypedValue.TYPE_REFERENCE) {
            int resIdOfArray = typedArray.getResourceId(i, 0);
            List<String> itemsForGivenRes = Arrays.asList(resources.getStringArray(resIdOfArray));
            itemList.addAll(itemsForGivenRes);
        }
    }

    typedArray.recycle();
    return itemList;
}

最后,您可以使用该函数获取new_array 中的项目列表:

List<String> arrayItems = getArrayItems(R.array.new_array, getApplicationContext().getResources());
Log.d("MyAdapter", "onCreate: " + arrayItems.toString()); // should print MyAct: onCreate: [name 1, name 2, name 3, name 4]

请注意,在我的示例中,我只考虑了字符串数组。只需稍加改动,您也可以使函数适应不同的数组。

希望我的回答对你有帮助。

【讨论】:

  • Natig Babayev,感谢您的回复。当然,我尝试插入普通数组的项目,但没有成功。当公共数组作为元素包含时,列表(实际上 - 微调器)似乎无效,因为应用程序在启动时停止。你的方法很好,但我要另辟蹊径。 11 个常见项目保存在单独的文件strings-common.xml 中(我的所有 3 个语言环境都可以并且必须这样做),然后这些项目被引用 11 次。有些复杂,但主要目的是达到了:如果需要更改其中一项常用项目,只需在strings-common.xml 中完成。
猜你喜欢
  • 2015-09-19
  • 2011-08-09
  • 2022-01-24
  • 2014-05-01
  • 1970-01-01
  • 2020-11-22
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多