2010-11-07 20 views
5

Ich habe eine Frage, die mich verrückt macht.Dynamischer Zugriff auf Elemente des Layouts

Ich habe eine große Anzahl von Tasten (10, mehr oder weniger) auf meinem Bildschirm, in einem TableRow.

Ich muss auf sie zugreifen, und ich hatte geplant, durch eine Schleife durchzuführen.

Zugang zu einem, ist es sehr einfach, das Hinzufügen dieser:

boton7 = (Button) findViewById (R.id.Btn7) 

Meine Frage ist, können, wenn Sie dynamisch den ID-String (R.id.Btn7), die in einem setzen kann für die Tasten bekommen und zum Beispiel die Farbe ändern .... etwas wie folgt aus:

for (int i = 0; i <10; i + +) { 
    Button eachBoton= (Button) findViewById (R.id.Btn + i); 
    eachBoton. setBackgroundColor (Color.Red); 
} 

das ist natürlich nicht funktioniert .... meine Frage ist, ob jemand weiß, wie genau die Kette montiert werden kann

R.id.Btn + i 

zu arbeiten.

Vielen Dank.

Antwort

13

können Sie Ressources::getIdentifier() verwenden, um eine Ressourcenkennung für den angegebenen Ressourcennamen zu erhalten:

int ressourceId = getResources().getIdentifier(
    "Btn"+i, 
    "id", 
    this.getContext().getPackageName()); 
Button button = (Button) findViewById(ressourceId); 

Alternativ können Sie ein Array mit allen IDs vorbereiten Sie benötigen und Zugang Elemente dieses Arrays. Das ist effizienter:

private final int[] btns = {R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4, ...} 
... 
Button button = (Button) findViewById(btns[i]); 
+0

Danke von der Antwort. Ich benutze dieses und arbeite !! –

+0

Danke, ich fand das sehr nützlich für das dynamische Laden von Ressourcen. –

2

Geben Sie eine Kennung zum Layout („Layout“ im Beispiel unten) und dann durchlaufen alle berührbaren Kinder von getTouchables verwenden. Wenn es eine Schaltfläche ist, ändern Sie die Farbe.

View layout = findViewById(R.id.layout) 
ArrayList<View> touchables = layout.getTouchables(); 
for (View b : touchables) { 
    if (b instanceof Button) { 
     b.setBackgroundColor(Color.Red); 
    } 
}