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!

War es hilfreich?

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);
}

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top