リソース ID をメソッドに渡すとき、多くの場合、ID と対応する文字列の両方にアクセスすることが望ましいです。たとえば、「アイコン」リソースについて考えてみましょう。
R.drawable.icon
ID と文字列「アイコン」の両方を取得するには、いくつかのアプローチを検討できます。
1 つの解決策には、リソースの利用が含まれます。 getIdentifier() メソッド:
int resID = getResources().getIdentifier("icon", "drawable", getPackageName()); String iconString = "icon";
ただし、最近の研究によると、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); // or other resource class String iconString = "icon";
ただしこの反射アプローチはより効率的である可能性がありますが、潜在的な欠点に注意することが重要です。コード/リソースの圧縮が有効になっているリリース ビルドでは、この解決策は失敗する可能性があります。さらに、文字列名が予期されるリソース名の形式と異なる場合には機能しない可能性があります。
以上が文字列名から Android リソース ID を効率的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。