Home » Android » android – How to dynamically create columns in a tablelayout?

android – How to dynamically create columns in a tablelayout?

Posted by: admin May 14, 2020 Leave a comment

Questions:

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

}
How to&Answers:

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

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

Answer:

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