1

for ループを使用して画面上に必要なすべてのスプライトを初期化することで、時間を節約しようとしていました。描画可能なフォルダーにいくつかの画像がありました。したがって、それに応じて名前を変更しました。を式に連結したかったのでi、何らかの方法で呼び出す/呼び出す必要がありました! 最初に私はこれを行うことを考えました:

Integer.parseInt("R.drawable.scoredisplay" + i)

次に、もちろん、それを整数に解析することはできません。また、その式の結果はとにかく整数を返します。i式を連結して呼び出すにはどうすればよいですか? 出来ますか?

4

1 に答える 1

1

可能です。次のことを行う必要があります。

Context x = getApplicationContext();
int myId  = x.getResources().getIdentifier("R.drawable.scoredisplay" + i, "drawable",x.getPackageName());

最初のパラメータが取得したい時点StringのIDである場合、 2番目のパラメータはこの場合は「drawable」のリソースのタイプであり、3番目のパラメータはコンテキストから取得するパッケージ名であり、メソッドを呼び出します。その後、次のコードでビューを取得できます。ViewgetPackageName()

View myView = findViewById(myId);

idは文字列ではないため、考えていたように文字列を整数にキャストしても意味がありません(ただし、これから説明するような回避策があります)。

アップデート

Activityクラスの外でこのコードを使用しているため、Contextメソッドの呼び出しは無効です。アクティビティの外部からアクティビティコンテキストにアクセスする方法を作成する必要があります(クラスからの呼び出しについて言及.getContext()していますが、アクティビティではなく、そのクラスコンテキストを取得します)。これを実現する方法は、コンストラクターを変更することです。たとえば、次の名前のクラスがあるとしますmyClass

class myClass{
    //Declase a Context variable inside your class
    Context x;

    //You implement a constructor for this class that accepts a Context as 
    //a parameter (feel free to add more if you are using a constructor already)
    public myClass(Context applicationContext){
        //Assign the passed value to your local Context
        x = applicationContext;
    }

    //Afterwards, on a different part of your class, you could invoke activity 
    //related methods by using the Context you have 'x'
    public void otherMethod(){
       int myId  = x.getResources().getIdentifier("R.drawable.scoredisplay" + i, "drawable",x.getPackageName());
    }
}

から値を正しく渡すことを保証する最後の部分でActivityは、コードのどこかにこれに似たものが表示されるはずです。

myClass i = new myClass();

コンストラクターがあるか、既存のコンストラクターを変更したthisので、アクティビティコンテキストをゲームまたは作成するクラスに直接渡すために追加できます。

myClass i = new myClass(this);//'this' can be 'getApplicationContext()'
于 2012-11-16T00:47:44.407 に答える