可能です。次のことを行う必要があります。
Context x = getApplicationContext();
int myId = x.getResources().getIdentifier("R.drawable.scoredisplay" + i, "drawable",x.getPackageName());
最初のパラメータが取得したい時点String
のIDである場合、 2番目のパラメータはこの場合は「drawable」のリソースのタイプであり、3番目のパラメータはコンテキストから取得するパッケージ名であり、メソッドを呼び出します。その後、次のコードでビューを取得できます。View
getPackageName()
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()'