user1714647
user1714647

Reputation: 664

How can I edit programmatically created buttons in Android?

I have this code which generates a GUI programmatically

 TableLayout table;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        table = new TableLayout(this);
        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT);
        table.setLayoutParams(lp);
        table.setStretchAllColumns(true);

        TableLayout.LayoutParams rowLp = new TableLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT, 1.0f);
        TableRow.LayoutParams cellLp = new TableRow.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT, 1.0f);
        int count = 0;
        for (int r = 0; r < 3; ++r) {
            TableRow row = new TableRow(this);
            for (int c = 0; c < 3; ++c) {
                count++;
                final Button btn = new Button(this);
                btn.setText("");
                btn.setId(count);

                btn.setOnClickListener(this);

                row.addView(btn, cellLp);
            }
            table.addView(row, rowLp);
        }
        TableRow erow = new TableRow(this);
        Button btn = new Button(this);
        btn.setText("Reset");
        btn.setId(10);
        btn.setOnClickListener(this);
        erow.addView(btn, cellLp);
        table.addView(erow, rowLp);
        setContentView(table);
        }

In the listener, I can change the text of the button I click this way

@Override
public void onClick(View v) {
    Button btn = (Button)v;
    btn.setText("text");
    }

But, how, can I interact with other buttons? I have tried with something like btn = (Button)findViewById(7); but it doesn't work. I also tried with an array of buttons but still doesn't work. Any tips?

Upvotes: 0

Views: 125

Answers (2)

Dima
Dima

Reputation: 1510

Try to use Tag instead id for your buttons:

for (...) {
    count++;
    final Button btn = new Button(this);
    ...
    btn.setTag(count);
    btn.setOnClickListener(this);
    ...
}

And in listener call (Integer)v.getTag()

Upvotes: 0

matiash
matiash

Reputation: 55340

findViewById() is mainly for views created by inflating XML layout files.

Though you can call setId() for views, in this case you should keep simply references to the programmatically created views, i.e.

private Button button1;

and then just use those fields.

Upvotes: 1

Related Questions