回答:
このようなもので:
String mDrawableName = "myappicon";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
getResources().getIdentifier(name, "id", getPackageName());
(R.id.nameの場合と同様に)ImageButtonのIDを取得するために使用します。
name
か?参照がわかっているボタンのIDを検索したいのですが、私の場合はそうですbutton1
getResource()
getPackageName()
エラーを示しています。cannot resolve method
getResource()
およびgetPackageName()
Activityのメソッドです。
これを試すこともできます:
try {
Class res = R.drawable.class;
Field field = res.getField("drawableName");
int drawableId = field.getInt(null);
}
catch (Exception e) {
Log.e("MyTag", "Failure to get drawable id.", e);
}
以下のURLからこのソースコードをコピーしました。このページで行われたテストに基づくと、getIdentifier()より5倍高速です。また、使いやすく使いやすいこともわかりました。それがあなたにも役立つことを願っています。
リンク: Androidでリソースを動的に取得する
パブリックシステムリソースの例:
// this will get id for android.R.drawable.ic_dialog_alert
int id = Resources.getSystem().getIdentifier("ic_dialog_alert", "drawable", "android");
別の方法は、android.R.drawableクラスのドキュメントを参照することです。
この関数を使用して、リソースIDを取得できます。
public static int getResourseId(Context context, String pVariableName, String pResourcename, String pPackageName) throws RuntimeException {
try {
return context.getResources().getIdentifier(pVariableName, pResourcename, pPackageName);
} catch (Exception e) {
throw new RuntimeException("Error getting Resource ID.", e)
}
}
したがって、Drawable Resource ID を取得したい場合は、次のようにメソッドを呼び出すことができます。
getResourseId(MyActivity.this, "myIcon", "drawable", getPackageName());
(またはフラグメントから):
getResourseId(getActivity(), "myIcon", "drawable", getActivity().getPackageName());
以下のために文字列リソースIDあなたはこのようにそれを呼び出すことができます。
getResourseId(getActivity(), "myAppName", "string", getActivity().getPackageName());
等...
注意:リソースIDが見つからない場合は、RuntimeExceptionがスローされます。本番環境では適切に回復してください。
static
そこから削除する必要があると思います、さもなければgetResources()
うまくいきません。
Context
は利用できませんでした。修正は、それを削除static
してContext
(たとえばActivity
またはApplication
)に移動することでした。または代替の修正は、ジョナサンが彼の編集で行ったContext
もので、メソッドに渡されます。