63

私はこれを試しました:

r = Resources.getSystem().getIdentifier("ball_red","drawable","com.Juggle2");
Log.i("FindBall","R = "+r);

この:

r = Resources.getSystem().getIdentifier("com.Juggle2:drawable/ball_red", null, null);

しかし、'r' は常に 0 になります。

Activity ではなく、何も拡張しないヘルパー クラス内からこの行を呼び出しているため、単純に を呼び出すことはできませんgetResources()が、 my から渡すことはできますSurfaceView

最終的には、変数に置き換えたいのです"ball_red"が、まず最初に。これは機能していません。

com.Juggle2は確かに私のパッケージ名です。drawableはそれが入っているresフォルダーで、ファイルの名前は確かにball_red.

R.java 言います:

        public static final int ball_red=0x7f020027;

そのため、なぜ機能しないのかわかりません。


したがって、リソースを使用することはできません。コンテキストを渡す必要があります。このようにしています。

class Collection extends SurfaceView implements SurfaceHolder.Callback {

クラスの新しいインスタンスを作成し、それgetContext()をパラメーターとして渡します。

4

3 に答える 3

144

あなたは活動の中にいるので、書くだけで十分です

int resId = YourActivity.this.getResources().getIdentifier(
    "ball_red",
    "drawable",
    YourActivity.this.getPackageName()
);

または、内部クラスから呼び出していない場合

int resourceID = getResources().getIdentifier(
    "ball_red",
    "drawable",
    getPackageName()
);

ノート

getIdentifier() Returns 0 if no such resource was found. (0 is not a valid resource ID.)

小切手

R.javadrawableで、という名前のが存在するかどうかも確認してくださいball_red

例えば:

public static final class drawable {
        public static final int ball_red = 0x7f020000;
 }

編集 あなたが活動をしていないなら、あなたは合格しなければなりませんcontext instead of resources as parameterそしてこれをします

int resId = context.getResources().getIdentifier(
    "ball_red",
    "drawable",
    context.getPackageName()
);
于 2013-03-18T22:39:13.440 に答える
4

Festus Tamakloe からの回答は正しいですが、この関数に癖がありました。

xml ファイルでを宣言している場合は、ベース リソース タイプをstring-array呼び出してアクセスする必要があります。 arraystring-array

于 2015-05-31T18:01:12.910 に答える