style - tablas editables en android studio
Cómo agregar filas dinámicamente en el diseño de la tabla (6)
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 <merge/>
(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"?>
<TableRow style="@style/PlanAttribute" xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
style="@style/PlanAttributeText"
android:id="@+id/attrib_name"
android:textStyle="bold"/>
<TextView
style="@style/PlanAttributeText"
android:id="@+id/attrib_value"
android:gravity="right"
android:textStyle="normal"/>
</TableRow>
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 ...
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.
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 programación mínima de su parte.
Editar : aquí hay un tutorial incluye SimpleCursorAdapter y ListView, incluido el código de muestra.
Tratar
new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
en lugar de
new LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
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
.