A veces necesitas crear una tabla de forma dinámica, por código. Por ejemplo, si quieres mostrar resultados de una base de datos en una pantalla con ScrollView, no deberías hacerlo mediante ListView ni mediante GridView porque incorporan sus propios controles de scroll, lo que interfiere con los de ScrollView. La solución más práctica es poner una tabla. Pero si lo que muestra la tabla procede de una base de datos, a priori no sabes cuántas filas debes poner, con lo que no puedes usar XML sino código. No se si me explico.
Crear una tabla por código es bastante fácil. En primer lugar tienes que crear una tabla vacía en XML. Vacía, sin fila alguna.
<TableLayout android:id="@+id/tablacultivos" android:layout_width="wrap_content" android:layout_height="wrap_content" android:stretchColumns="2" android:shrinkColumns="2" > </TableLayout>
TextView txtCultivos=(TextView) getView().findViewById(R.id.LblCultivos); TableLayout tabladatos=(TableLayout) getView().findViewById(R.id.tablacultivos); TableRow.LayoutParams layoutFila=new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT); TableRow.LayoutParams layoutFecha=new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT); TableRow.LayoutParams layoutMuestra=new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT); TableRow.LayoutParams layoutResultado=new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT);
TableRow fila; TextView txtFecha; TextView txtMuestra; TextView txtResultado;
tabladatos.removeAllViews();
if (cursor.moveToFirst()) { do { fila=new TableRow(this); // Si, necesita contexto fila.setLayoutParams(layoutFila); txtFecha=new TextView(this); txtMuestra=new TextView(this); txtResultado=new TextView(this); txtFecha.setText(cursor.getString(0)); txtFecha.setGravity(Gravity.RIGHT); txtFecha.setPadding(0, 0, 5, 0); txtFecha.setLayoutParams(layoutFecha); txtMuestra.setText(cursor.getString(1)); txtMuestra.setPadding(0,0,5,0); txtMuestra.setLayoutParams(layoutMuestra); txtResultado.setText(cursor.getString(2)); txtResultado.setLayoutParams(layoutMuestra); fila.addView(txtFecha); fila.addView(txtMuestra); fila.addView(txtResultado); tabladatos.addView(fila); } while (cursor.moveToNext()); }