2011-01-18 5 views
24

としてのidキャストとビューを取得:上記R.idでAndroidとビューリソースの参照をしたい場合は、あなたが何か行うことができますAndroidのプロジェクトのJavaコードでは、文字列

View addButton = findViewById(R.id.button_0); 

を.button_0は文字列ではありません。 "R.id.button_0"のような文字列でリソースを動的に参照することはできますか?

%iが有効なインデックスに置き換えられたボタンを「R.id.button_%i」といいます。 %iは、いくつかの有効なインデックスで置き換えられる

答えて

52
int resID = getResources().getIdentifier("button_%i", 
    "id", getPackageName()); 
View addButton = findViewById(resID); 

getResources()メソッドはContextクラスに属していますので、Activityから直接使用することができます。アクティビティー内にいない場合は、コンテキストを使用して(myCtxt.getResources())にアクセスします。

+0

@Christian:ありがとうございます。完璧。 – SK9

+3

これはIDを直接使用するよりも大幅に遅くなることに注意してください。 – hackbod

+0

ありがとう、ちょうど私が探していたもの。 Btw、このコードサンプルでコンパイルエラーを修正しました。 –

4

すべてのIDを配列に入れてから、その配列を使用して代わりにリソースを動的に参照できます。

+0

これは、特別な機会(リソースの名前が変更されたり、注文が複雑な場合など)に適した方法です。そうでなければ、それを行うより良い方法ではないと私は思う。あなたがコードを嗅覚的に見せる巨大な配列で終わることがあります。 – Cristian

+0

@cristianそれは本当に恐ろしい厄介なコードを作成します。過去にこれをやったところでは、私は静的クラスでそれを押しつけました。しかし、あなたのアプローチはいくぶんいいですね;) – jsonfry

+1

imho両方の匂いがします。 :) – Qberticus

関連する問題