ホームページ >Java >&#&チュートリアル >文字列から Android リソース ID と文字列参照を効率的に取得する方法

文字列から Android リソース ID と文字列参照を効率的に取得する方法

DDD
DDDオリジナル
2024-12-20 12:56:14995ブラウズ

How to Efficiently Retrieve Android Resource IDs and String References from a String?

文字列からリソース ID と文字列参照を取得する

多くの Android 開発シナリオでは、リソース ID と対応する文字列の両方をメソッドに渡す必要があります。たとえば、R.drawable.icon のような参照があり、その整数 ID と文字列「icon」の両方が必要な場合があります。

解決策 1: Resources.getIdentifier() を使用する

Android Studio は、Resources.getIdentifier() と呼ばれる効率的なメソッドを提供します。この関数は、文字列、パッケージ名、リソース タイプをパラメータとして受け取り、対応するリソース ID を返します。パッケージ名は getPackageName() を使用して取得できます。問題の例のコードは次のようになります。

int resId = getResources().getIdentifier("icon", "drawable", getPackageName());
String resString = "icon";

解決策 2: リフレクションを使用する

Android Studio に Resources.getIdentifier() が導入される前は、リフレクションこの機能を実現するために一般的に使用されていました。次のコードは、このアプローチを示しています。

public static int getResId(String resName, Class<?> c) {
  try {
    Field idField = c.getDeclaredField(resName);
    return idField.getInt(idField);
  } catch (Exception e) {
    e.printStackTrace();
    return -1;
  }
}

次のように利用できます。

int resId = getResId("icon", R.drawable.class);
String resString = "icon";

パフォーマンスに関する考慮事項

いくつかの情報源によると, Resources.getIdentifier() は、リフレクションベースのアプローチよりも高速に実行されます。ただし、特定の Android ビルド シナリオ、特にコードとリソースの圧縮が有効になっている場合、リフレクション メソッドが失敗する可能性があることに注意することが重要です。

以上が文字列から Android リソース ID と文字列参照を効率的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。