2

私は現在問題に直面しています。関数 " findViewById()" をこのように使用することは可能ですか?

String[] names{ "a", "b"};
findViewById(R.drawable.names[0]);
4

4 に答える 4

3

編集: ご存知のようfindViewByIdに、R.id型のみを呼び出すことができます。したがって、型で呼び出しているため、コードは必ず失敗しR.drawableます。

試してみてくださいgetIdentifier()ドキュメンテーション

int resourceId = getResources().getIdentifier(names[0], "drawable", getPackageName());
findViewById(resourceId);

注: Android ドキュメントには次のように記載されています。

この機能の使用はお勧めできません。名前でリソースを取得するよりも、識別子でリソースを取得する方がはるかに効率的です。

この場合、 の配列を定義し、それらにリソースintの ID が含まれていた方がよいでしょう。drawable

于 2013-03-19T07:14:35.563 に答える
1

いいえ、それはできませんが、代わりに回避策があります。このようなことを試してください:-

String[] names{ "a", "b"};
int drawableId = this.getResources().getIdentifier(names[0], "drawable", this.getPackageName());
findViewById(drawableId);

this明確にするために書かれたアクティビティはどこにありますか。

string.xmlまたはUI 要素Stringのが必要な場合は、「drawable」に置き換えます。identifier

int resourceId = this.getResources().getIdentifier("nameOfResource", "id", this.getPackageName());

警告する必要があります。この方法で識別子を取得するのは非常に時間がかかります。必要な場合にのみ使用してください。

于 2013-03-19T07:15:18.390 に答える
0

findViewById() は文字列ではなく int を受け入れます。だからあなたはのように使うことができます..

int[] txtViewIdsform1;
txtViewIdsform1 = new int[] { R.drawable.txt_phone1, R.drawable.txt_phone2,
                R.drawable.txt_fax, R.drawable.txt_contact_name, R.drawable.txt_contact_ph};
于 2013-03-19T07:15:58.483 に答える
0

いいえ、これはできません

あなたは他の方法でそれを行うことができます

int[] ids={R.drawable.a,R.drawable.b};
findViewById(ids[0]);
于 2013-03-19T07:16:33.617 に答える