【问题标题】:How do I convert this java array into xml?如何将此 java 数组转换为 xml?
【发布时间】:2013-07-04 23:34:18
【问题描述】:

背景: 对于我的 Android 应用程序,我使用 ListView 和列表项触发声音,这些声音存储为 /res/raw/ 目录中的 .ogg 文件。我能够通过存储在 strings.xml 中的字符串数组自动设置列表视图的文本标签和长度,现在我需要一个额外的 ResID 数组,我也想将其存储在那里,以便将来方便扩展列表视图.

工作代码: 对于字符串数组,我使用以下代码: Java 片段:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
...
titles = getResources().getStringArray(R.array.listoftitles);

XML (strings.xml):

<string-array name="listoftitles">
    <item>Title1</item>
    <item>Title2</item>
</string-array>

有问题的代码: Java 片段:

filenames = new int[]{R.raw.both1, R.raw.both2, R.raw.both3, R.raw.both4, R.raw.both5
            , R.raw.both6, R.raw.both7, R.raw.both8, R.raw.both9, R.raw.both10, R.raw.both11
            , R.raw.both12, R.raw.both13, R.raw.both14, R.raw.both15, R.raw.both16, R.raw.both17
            , R.raw.both18, R.raw.both19};

目标:

private void populatemylist() {
    for (int i = 0; i < titles.length; i++) {
        itemsdb.add(new Item(titles[i], descriptions[i], filenames[i]));
    }

}

populatemylist() 方法的便利性至关重要,虽然标题[] 和描述[] 很容易从 xml 数组中获取,但它不适用于文件名,我需要将其作为 ResID / int 值。我尝试使用整数数组以及带有 TypedArray Java 后端的通用数组,但这似乎是针对可绘制对象的,我无法让它从 /res/raw/ 文件夹中获取任何内容。我想要一个简单的数组解决方案,以

的方式进入strings.xml
<item>R.raw.both1</item>

还有一个简单的 java 后端,它为我提供了一个包含这些文件名的 int 数组。

【问题讨论】:

    标签: java android xml arrays


    【解决方案1】:

    您需要使用 TypedArray,如果您有任何问题,请告诉我,否则祝您好运!

    文件名.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
           <string-array name="random_imgs">
            <item>@raw/both1</item>
            <item>@raw/both2</item>
            <!-- ... -->
        </string-array>
    
    </resources>
    
    private int getFileNameAtIndex(int index) {
            TypedArray fileNames = getResources().obtainTypedArray(R.array.filenames);
            // or set you ImageView's resource to the id
            int id = fileNames.getResourceId(index, -1); //-1 is default if nothing is found (we don't care)
            fileNames.recycle();
            return id;
        }
    

    【讨论】:

    • 非常感谢!这正是我所需要的。所有其他 stackoverflow 问题和教程总是在 Fragment 中使用本地 int[] 并尝试将整个数组投射过来。这很好用,因为它只能通过一种方法获得重要的当前值,而这是所有其他不起作用的解决方案所缺少的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2016-06-04
    • 2014-04-15
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    相关资源
    最近更新 更多