Cómo agregar filas dinámicamente en el diseño de la tabla

Tengo ciertos datos en sqllite y se actualizan cada vez que lo deseo, hago clic en el botón Guardar y quiero mostrar los datos en un diseño de tabla para agregar más filas para los datos actualizados.

Tengo un código determinado, pero muestra solo los datos actualizados que reemplazan los datos anteriores y quiero agregar más filas a medida que los datos se actualizan.

Sé que esto es solo para agregar una fila al diseño de la tabla, pero ¿cómo puedo agregar más filas?

TableLayout tl=(TableLayout)findViewById(R.id.maintable); TableRow tr1 = new TableRow(this); tr1.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); TextView textview = new TextView(this); textview.setText(data); //textview.getTextColors(R.color.) textview.setTextColor(Color.YELLOW); tr1.addView(textview); tl.addView(tr1, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 

La forma en que ha agregado una fila en el diseño de la tabla puede agregar varias instancias de TableRow en su objeto tableLayout

 tl.addView(row1); tl.addView(row2); 

etc …

Esta es la técnica que descubrí después de un poco de prueba y error que le permite conservar sus estilos XML y evitar los problemas de usar un (es decir, inflar () requiere una fusión para adjuntar a la raíz, y devuelve el nodo raíz) . No se new TableRow() s o new TextView() .

Código

Nota: Aquí CheckBalanceActivity es un ejemplo de clase de Activity

 TableLayout table = (TableLayout)CheckBalanceActivity.this.findViewById(R.id.attrib_table); for(ResourceBalance b : xmlDoc.balance_info) { // Inflate your row "template" and fill out the fields. TableRow row = (TableRow)LayoutInflater.from(CheckBalanceActivity.this).inflate(R.layout.attrib_row, null); ((TextView)row.findViewById(R.id.attrib_name)).setText(b.NAME); ((TextView)row.findViewById(R.id.attrib_value)).setText(b.VALUE); table.addView(row); } table.requestLayout(); // Not sure if this is needed. 

attrib_row.xml

 < ?xml version="1.0" encoding="utf-8"?>     

Tal vez sea mejor utilizar un ListView con un CursorAdapter (o SimpleCursorAdapter ).

Estos están diseñados para mostrar las filas de una base de datos sqlite y permiten la actualización con una progtwigción mínima de su parte.

Editar : aquí hay un tutorial que incluye SimpleCursorAdapter y ListView, incluido el código de muestra.

Usted lo está haciendo bien; cada vez que necesite agregar una fila, simplemente nueva TableRow() , etc. Sin TableRow() , le resultará más fácil inflate la nueva fila desde XML .

Solución 1. Establezca su TableLayout tl como variable de miembro de clase, solo llame a TableLayout tl=(TableLayout)findViewById(R.id.maintable); cuando inicias la clase. Cuando se presiona el botón, usa tl directamente, p. Ej. tl.addView (fila), ya no llama a FindViewById. Entonces la próxima fila nueva no reemplazaría la nueva fila anterior.

Solución 2. Cada vez que haga clic en el botón, guarde los datos actualizados en una matriz, y luego vuelva a procesar el diseño de toda la tabla mediante un ciclo en la matriz.

Tratar
new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));

en lugar de

new LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));