Android Inflate layout to use inside TableRow

2020-04-27 14:07发布

问题:

I'm trying to build a table in android dynamically. But when I attempt to inflate a view, for instance, table_cell.xml, and add it to my table row, nothing appears:

TableLayout tableLayout = (TableLayout)rootView.findViewById(R.id.tableLayout);

View tableCell = getActivity().getLayoutInflater()
                    .inflate(R.layout.table_cell, container, false);

TableRow tableRow = new TableRow(getActivity());

tableRow.addView(tableCell);
tableLayout.addView(tableRow);

On the other hand, if I just create a TextView manually, then add it to the row, it seems to work fine. Can anyone help me figure out why adding an inflated layout doesn't work?

回答1:

You should try with getActivity().getLayoutInflater() .inflate(R.layout.table_cell, tableRow, true);

And you should not add the tableCell view on the tableRow manually in this case as the inflator method takes care of that since we pass true ..



回答2:

Try This You have to provide id for positioning.

TableLayout tableLayout = (TableLayout)rootView.findViewById(R.id.tableLayout);

View tableCell = getActivity().getLayoutInflater()
                .inflate(R.layout.table_cell, container, false);

TableRow tableRow = new TableRow(getActivity());

tableRow.addView(tableCell);
tableLayout.addView(tableRow,id);

or

TableLayout tableLayout = (TableLayout)rootView.findViewById(R.id.tableLayout);

View tableCell = getActivity().getLayoutInflater()
                .inflate(R.layout.table_cell, container, false);

TableRow tableRow = new TableRow(getActivity());

TableRow.LayoutParams LP = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT);

tableRow.setLayoutParams(LP);
tablerow.setId(ID);


tableRow.addView(tableCell);
tableLayout.addView(tableRow);

or

TableLayout tableLayout = (TableLayout)rootView.findViewById(R.id.tableLayout);

View tableCell = getActivity().getLayoutInflater()
                .inflate(R.layout.table_cell, container, false);

TableRow tableRow = new TableRow(getActivity());


tableRow.setLayoutParams(new LayoutParams(
            LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT)); 
tablerow.setId(ID);


tableRow.addView(tableCell);
tableLayout.addView(tableRow, new TableLayout.LayoutParams(
            LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));