4

次のようなリソースxmlファイルがあるとします。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <array name="difficulties">
        <item>
            <integer name="level">1</integer>
            <integer name="fixed_blocks">2</integer>
            <integer name="color_count">2</integer>
        </item>
        <item>
            <integer name="level">2</integer>
            <integer name="fixed_blocks">4</integer>
            <integer name="color_count">3</integer>
        </item>
        <item>
            <integer name="level">3</integer>
            <integer name="fixed_blocks">6</integer>
            <integer name="color_count">3</integer>
        </item>
    </array>    
</resources>

item名前から整数値を取得するにはどうすればよいですか?のTypedValueAPIには、このためのメソッドが含まれていないようです。これがどのように不可能な場合はTypedArrayどうですか?

アイテムから序数で値を取得できれば、それも問題ありません。

4

1 に答える 1

6

私はこれが可能だったことを思い出しません(しかし私は間違っている可能性があります)。(配列内の)項目の構造から判断すると、difficulties他のことを行うことができ、整数配列の配列を使用できます。アイテム配列がlevel最初の位置にあることを知っているfixed_blocksと、2番目の位置などとして、値を簡単に取得できます。この例は、Androidリソース-配列の配列で見つけることができます

編集: これはあなたが探している方法ですか?

private int[] getLevelConstants(int level) {
    int[] result = null;
    TypedArray ta = getResources().obtainTypedArray(R.array.difficulties);
    // keep in mind the differences between the level(starts at 1) and the index of the difficulties array which starts at 0
    int id = ta.getResourceId(level, 0); 
    if (id > 0) {
        result = getResources().getIntArray(id);
    } else {
        // something bad
    }
    return result;
}

配列は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <integer-array name="difficulties">
        <item>@array/level1</item>
        <item>@array/level2</item>
    </integer-array>

    <integer-array name="level1" >
        <item>1</item>
        <item>2</item>
        <item>2</item>
    </integer-array>

    <integer-array name="level2" >
        <item>2</item>
        <item>4</item>
        <item>3</item>
    </integer-array>

</resources>
于 2012-10-01T15:02:25.363 に答える