次のようにして、strings.xml から値が「Hello」の文字列の ID を取得しようとしています。
getContext().getResources().getIdentifier("Hello", "string", getContext().getPackageName());
0 を返します。なぜ 0 を返すのですか?
次のようにして、strings.xml から値が「Hello」の文字列の ID を取得しようとしています。
getContext().getResources().getIdentifier("Hello", "string", getContext().getPackageName());
0 を返します。なぜ 0 を返すのですか?
文字列valueを渡しているため、文字列のリソース名を渡す必要があります。
メソッドのシグネチャを見てください: getIdentifier(String name, String defType, String defPackage)
.
リソースが見つからない場合は、0
発生しているものと一致する が返されます。
編集:
の使用getIdentifier()
はお勧めしません - 参照を引用するには:
注: この関数の使用は推奨されません。名前でリソースを取得するよりも、識別子でリソースを取得する方がはるかに効率的です。
問題の文字列の値に基づいて文字列の ID を取得する直接的な方法はわかりません。ただし、2 つの回避策/ハックを見てきました。
stringN
次のように、ルックアップを実行するすべての文字列に名前を付けますN
。string0
、 などの醜い名前になってしまいstring1
ます。次に、自分でルックアップを行います。 を反復処理しN
、文字列 ID: を作成しstringN
、その値を取得して、一致するかどうかを確認します。これは私の意見では醜いです。
Typed Arrayリソースを使用して、そこにすべての文字列を配置します。基本的に方法 1 と同じですが、厄介で汚染されたリソース名の作成を回避します。