Android: Verwenden Sie FindViewbyId () mit einer String / in einer Schleife
-
28-10-2019 - |
Frage
Ich mache eine Android -Anwendung, bei der eine Ansicht aus Hunderten von Schaltflächen mit jeweils einen bestimmten Rückruf besteht. Jetzt möchte ich diese Rückrufe mit einer Schleife einstellen, anstatt Hunderte von Codezeilen schreiben zu müssen (für jede der Schaltflächen).
Meine Frage lautet: Wie kann ich FindViewbyId verwenden, ohne statisch jede Schaltflächen -ID eingeben zu müssen? Hier ist, was ich gerne tun möchte:
for(int i=0; i<some_value; i++) {
for(int j=0; j<some_other_value; j++) {
String buttonID = "btn" + i + "-" + j;
buttons[i][j] = ((Button) findViewById(R.id.buttonID));
buttons[i][j].setOnClickListener(this);
}
}
Danke im Voraus!
Lösung
Du solltest benutzen getIdentifier()
for(int i=0; i<some_value; i++) {
for(int j=0; j<some_other_value; j++) {
String buttonID = "btn" + i + "-" + j;
int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
buttons[i][j] = ((Button) findViewById(resID));
buttons[i][j].setOnClickListener(this);
}
}
Andere Tipps
Sie können versuchen, eine int [] zu erstellen, die alle Ihre Button -IDs hält, und dann darüber iterieren:
int[] buttonIDs = new int[] {R.id.button1ID, R.id.button2ID, R.id.button3ID, ... }
for(int i=0; i<buttonIDs.length; i++) {
Button b = (Button) findViewById(buttonIDs[i]);
b.setOnClickListener(this);
}
Schauen Sie sich diese Antworten an:
Sie können Tag verwenden, wenn Sie zugreifen möchten.
in onClick
int i=Integer.parseInt(v.getTag);
Aber Sie können auf diese Taste nicht so zugreifen.
Erstellen Sie einfach die Schaltfläche programmatisch
durch Button b=new Button(this);
Erstellen Sie die benutzerdefinierte Schaltfläche im Java -Code eher in XML, wie ich unten gezeigt habe
Button bs_text[]= new Button[some_value];
for(int z=0;z<some_value;z++)
{
try
{
bs_text[z] = (Button) new Button(this);
}
catch(ArrayIndexOutOfBoundsException e)
{
Log.d("ArrayIndexOutOfBoundsException",e.toString());
}
}
Wenn Ihre Top -Level -Ansicht nur diese Schaltflächenansichten als Kinder hat, könnten Sie dies tun
for (int i = 0 ; i < yourView.getChildCount(); i++) {
Button b = (Button) yourView.getChildAt(i);
b.setOnClickListener(xxxx);
}
Wenn weitere Ansichten vorhanden sind, müssen Sie überprüfen, ob der ausgewählte eine Ihrer Schaltflächen ist.
Wenn Sie aus irgendeinem Grund die nicht verwenden können getIdentifier()
Funktion und/oder Sie kennen die möglichen IDs vorher, Sie können einen Switch verwenden.
int id = 0;
switch(name) {
case "x":
id = R.id.x;
break;
etc.etc.
}
String value = findViewById(id);