Wie gibt man generierten Buttons eine ID?

  • Antworten:8
Phillip
  • Forum-Beiträge: 27

10.09.2014, 22:43:38 via Website

Hallo,

ich habe mit dem beiliegenden Code mir einpaar dynamische buttons generieren lassen, kann diese jedoch nicht indiviuell bearbeiten, da sie keine Id besitzen (oder zumindest wüsste ich nicht das sie eine haben). Wie kann ich jetzt jeden Button eine bestimmte ID geben?
Ich habe 3 Reihen mit jeweils 3 Buttons. Wie kann ich jetzt z.B. dem 2ten Button in der 2ten reihe die ID "button5" geben? Nur so als beispiel?

public class MainActivity extends ActionBarActivity {

private static final int NUM_ROWS = 3;
private static final int NUM_COLS = 3;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    populateButtons();
}


private void populateButtons() {
    TableLayout table = (TableLayout) findViewById(R.id.TableLayout);

    for (int row =0; row < NUM_ROWS; row++) {
        TableRow tableRow = new TableRow(this);
        tableRow.setLayoutParams(new TableLayout.LayoutParams(
                TableLayout.LayoutParams.MATCH_PARENT,
                TableLayout.LayoutParams.MATCH_PARENT,
                1.0f));
        table.addView(tableRow);
        for (int col = 0; col < NUM_COLS; col++) {
            Button button = new Button(this);
            tableRow.addView(button);
    }
  } 
}

Antworten
Gelöschter Account
  • Forum-Beiträge: 336

11.09.2014, 00:20:19 via App

Du schreibst doch:
Button button = new Button(this);
Also sollte es doch möglich sein die erstellte Instanz zu bearbeiten oder irre ich mich?
Zum Beispiel:
button.setText("Hello World!" );

— geändert am 11.09.2014, 00:20:51

Android Developer

Antworten
Jakob N.
  • Forum-Beiträge: 282

11.09.2014, 06:55:21 via App

Mete hat vollkommen recht!
Ansonsten kannst du auch button.setId(x); schreiben, um dem Button die Id x zuzuweisen.

LG Jakob

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

11.09.2014, 09:48:30 via Website

Genau, du darfst dann aber nicht vergessen, den Button deinem Layout hinzuzufügen, sonst wird er ja nicht angezeigt.

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Georg C.
  • Forum-Beiträge: 235

11.09.2014, 10:31:37 via Website

Und dafür eignet sich das gebrauch zu machen vom (Konstruktor):

public Button (Context context, AttributeSet attrs)

LG
Georg

Sorry für Gramatik & Stilistik Fehler.

Antworten
Phillip
  • Forum-Beiträge: 27

11.09.2014, 15:04:41 via Website

ja aber wenn ich jetzt button.setid(button1) mache, welcher von den 9 Buttons hat dann diese id??

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

11.09.2014, 15:11:12 via Website

Nein, du hast das flasch verstanden, du hast eine Instanz deines Buttons, dieser ist bisher noch nicht auf dem Layout.
Dann setzt du den Text etc und die ID und zwar als Integer(!).
Zuletzt musst du noch mit deinLaoyut.add(beinButton) / Pseudocode bitte richtige Syntax naschschauen|Den button deinem Layout hinzufügen. erst dann existiert dieser Button.

-------------

Wenn du jetzt aber nur auf dem Layout existierende Buttons im Programm behandeln willst, machst du es so:

Button deinBTN = (Button)findViewById(R.id.deinButton);
//Jetzt kannst du mit dem BTN weitermachen...

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Phillip
  • Forum-Beiträge: 27

11.09.2014, 15:31:40 via Website

asooooooooo okay danke es hat mich nur verwirrt da die buttons im emulator schon angezeigt werden :D
okay ich habe in dem app schon einen button der eine aktion auslöst mit der id button1. Wie kann ich jetzt diesen button so programmieren das er den ersten (noch nicht exestierenden) Button zuordenen kann? wo muss das

Button button1 = (Button)findViewById(R.id.button1);

stehen? Noch im private void populateButtons() oder darunter?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

11.09.2014, 15:34:49 via Website

Ich würde das direkt in die onCreate schreiben.
Was willst du denn dann mit dem Button anfangen?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten