string-arrayからid取得

リソース内で文字列配列を定義するときはstring-arrayを使います。

例えば次のようなコードです。

<string name="mouse">Mouse</string>
<string name="cow">Cow</string>
<string name="tiger">Tiger</string>

<string-array name="animals">
    <item>@string/mouse</item>
    <item>@string/cow</item>
    <item>@string/tiger</item>
</string-array>

この例では配列IDとしてanimalsという名前をつけました。この配列IDからコード中で文字列IDを取得するには次の簡単なコードで書けます。

TypedArray itemArray = getResources().obtainTypedArray(R.array.animals);

TypedArrayのあるインデックスの文字列IDを取得する場合はgetResourceIdメソッドを使います。

int mouseId = itemArray.getResourceId(0, -1);

この場合、0番目のIDなのでR.string.mouseが返ってきます。

注意点

string-arrayから文字列IDを取得する場合、注意しなければならないことがあります。

それは次のようにあるstringIDを別のstringIDで参照しているときです。

<string name="mouse">Mouse</string>
<string name="cow">Cow</string>
<string name="tiger">Tiger</string>

<string name="mouse_ref">@string/mouse</string>

<string-array name="animals">
    <item>@string/mouse_ref</item>
    <item>@string/cow</item>
    <item>@string/tiger</item>
</string-array>

もしanimalsで0番目の文字列IDを取得した場合、.string.mouse_refではなく、R.string.mouseつまり参照元の文字列IDが返ってきます。

このことが分からないとエラーが発生しないのに期待したIDが返ってこないで悩むことになります。

以上、string-arrayから各文字列のIDを取得するにはでした。では、また!

関連項目
プライバシーポリシー