L. D. James
L. D. James

Reputation: 1719

How to dynamically create columns in a tablelayout?

I'm trying to get an understanding of how to dynamically add columns and rows to a tablelayout.

I have this simple example. However, it only shows the first column when ran.

Can someone tell me what is missing in order to display four columns instead of one?

package com.apollo.testtablelayout;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class TestTableLayoutActivity extends Activity {
    /** Called when the activity is first created. */

    String col1;
    String col2;
    String col3;
    String col4;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TableLayout tl = (TableLayout) findViewById(R.id.tableLayout1);

        for (int x = 1; x < 10; x++) {

            col1 = "(" + x + ") Column 1";
            col2 = "(" + x + ") Column 2";
            col3 = "(" + x + ") Column 3";
            col4 = "(" + x + ") Column 4";

            TableRow newRow = new TableRow(this);

            TextView column1 = new TextView(this);
            TextView column2 = new TextView(this);
            TextView column3 = new TextView(this);
            TextView column4 = new TextView(this);

            column1.setText(col1);

            newRow.addView(column1);
            newRow.addView(column2);
            newRow.addView(column3);
            newRow.addView(column4);

            tl.addView(newRow, new TableLayout.LayoutParams());
        }
    }

}

Upvotes: 12

Views: 9884

Answers (2)

Daniel Wilson
Daniel Wilson

Reputation: 19824

Don't forget that each column needs new TableLayout.LayoutParams() as well, that was the mistake I made trying to add a more complex view to a table layout.

newRow.addView(view, new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,
                            TableRow.LayoutParams.WRAP_CONTENT) );

Upvotes: 0

Roberto
Roberto

Reputation: 76

You need to have the setText for each of the columns text

column1.setText(col1); 
column2.setText(col2); 
column3.setText(col3); 
column4.setText(col4); 

Upvotes: 6

Related Questions