2

次のようにして、strings.xml から値が「Hello」の文字列の ID を取得しようとしています。

getContext().getResources().getIdentifier("Hello", "string", getContext().getPackageName());

0 を返します。なぜ 0 を返すのですか?

4

2 に答える 2

4

文字列valueを渡しているため、文字列のリソース名を渡す必要があります。

メソッドのシグネチャを見てください: getIdentifier(String name, String defType, String defPackage).

リソースが見つからない場合は、0発生しているものと一致する が返されます。

編集:

  1. の使用getIdentifier()はお勧めしません - 参照を引用するには:

    注: この関数の使用は推奨されません。名前でリソースを取得するよりも、識別子でリソースを取得する方がはるかに効率的です。

  2. 問題の文字列の値に基づいて文字列の ID を取得する直接的な方法はわかりません。ただし、2 つの回避策/ハックを見てきました。

    1. stringN次のように、ルックアップを実行するすべての文字列に名前を付けますNstring0、 などの醜い名前になってしまいstring1ます。次に、自分でルックアップを行います。 を反復処理しN、文字列 ID: を作成しstringN、その値を取得して、一致するかどうかを確認します。これは私の意見では醜いです。

    2. Typed Arrayリソースを使用して、そこにすべての文字列を配置します。基本的に方法 1 と同じですが、厄介で汚染されたリソース名の作成を回避します。

于 2013-02-21T16:35:51.047 に答える