2011-02-09 35 views
2

典型的な方法は、このようなものです:R.id.tvは整数私のxml制御を参照しているリファレンスコントロールアンドロイドコントロールを参照する代わりに、文字列を使用してID

TextView tv = (TextView)findViewById(R.id.tv); 

問題は、 "R.id.tv"という文字列を使用して参照したいことです。それは可能ですか?

のは、私は複数のコントロールを持っているとしましょう:

tv1, 
tv2, 
tv3, 
tv4, 
tv5, 

私がコントロールをループしinterateのいくつかの並べ替えにこれを置くだろうか。私はループカウンターを使ってさまざまなコントロールを参照すると思っています。どうやってやるの?ありがとう。

答えて

1

はこの質問を見ている:あなたはこれをしたいと思いますなぜ私は理解していない

+0

はあなたに感謝。私はgetIdentifierを見ていましたが、正しく使用する方法は不明でした。あなたがリンクした例は、私が達成したいものを正確に示しています。 – bobetko

3

1つの方法は、idを配列に入れ、添字で参照する方法です。

int[] ids = { R.id.tv1, R.id.tv2 /* etc. */ }; 
for (int i = 0; i < ids.length; ++i) { 
    TextView tv = (TextView)findViewById(ids[i]); 
} 
1

を、それはかなり、醜い非効率的、およびへの可能性がありますメンテナンスの問題やバグの原因となります。

コレクション(例:ArrayList)を使用してすべてのコントロールへの参照を保存してみませんか?

2

は、次の

private int getIdResourceByName(String aString) 
{ 
    String packageName = "com.myProject.myPackage"; // set your package name here 
    int resId = getResources().getIdentifier(aString, "id", packageName); 
    return resId; 
} 

をお試しください...

for (int i = 1; i<=5; i++) { 
     TextView tv = (TextView) findViewById(getIdResourceByName("tv" + Integer.toString(i))); 
     ... 
    } 
関連する問題