Hola a todos, quizá alguna vez necesitaseis crear una lista donde en cada fila sea necesario incluir botones u otros elementos propios de la interfaz Android, pues hoy os voy a dar una pequeña receta que a mi personalmente me ha sacado de un apuro y además funciona a la perfección. Por supuesto podéis añadir vuestros propios elementos y personalizarla como queráis.
En primer lugar debemos crear en la carpeta /res/layout de nuestro proyecto Android, un fichero XML que llamaremos fila.xml que debe quedar así:
1 <?xml version="1.0" encoding="utf-8"?> 2 <TableRow android:id="@+id/tableRow1" 3 android:layout_width="wrap_content" 4 android:layout_height="wrap_content" 5 android:gravity="center" 6 xmlns:android="http://schemas.android.com/apk/res/android"> 7 8 <Button 9 android:id="@+id/button1" 10 style="?android:attr/buttonStyleSmall" 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content" 13 android:layout_marginRight="20dp" 14 android:text="Botón" /> 15 16 <TextView 17 android:id="@+id/textView1" 18 android:layout_width="wrap_content" 19 android:layout_height="wrap_content" 20 android:text="Descripción" 21 android:layout_marginRight="20dp" 22 android:textAppearance="?android:attr/textAppearanceMedium" /> 23 24 </TableRow>
Con esto hemos especificado el contenido que tendrá cada una de nuestra filas de la lista, en nuestro caso un botón y un TextView, pero esto sólo es el contenido de una fila, tenemos que crear un layout donde se podrán colocar cada una de estas filas, para ello también dentro del directorio res/layout crearemos un fichero XML llamado activity_lista.xml que será el que se muestre en nuestra aplicación y básicamente tendrá como contenido un TableLayout donde ubicarse las filas que definimos antes (como veréis está dentdo de un ScrollView en caso de que nuestra lista sea muy grande), aquí el código:
1 <?xml version="1.0" encoding="utf-8"?> 2 3 4 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 5 android:id="@+id/scrollView_productos" 6 android:layout_width="fill_parent" 7 android:layout_height="fill_parent" > 8 9 <TableLayout 10 android:id="@+id/tableLayout" 11 android:layout_width="match_parent" 12 android:layout_height="wrap_content" > 13 14 15 </TableLayout> 16 17 18 </ScrollView> 19
Y ahora lo más importante, ¿cómo hacemos que la fila que definimos en el archivo fila.xml se replique y se coloque en el archivo que acabamos de crear, activity_lista.xml?, para ello necesitamos una clase Activity_fila.java que extienda Activity para que realice ese trabajo, básicamente nuestra clase tendrá un bucle el cual irá replicando la fila y la irá colocando en nuestra activity_fila.xml, además cada fila que colocamos podemos modificarla y añadir nuevos valores al TextView con su función setText() o incluso añadir mas widgets desde el código, os dejo un ejemplo:
1 import android.app.Activity; 2 import android.os.Bundle; 3 import android.view.LayoutInflater; 4 import android.widget.TableLayout; 5 import android.widget.TableRow; 6 import android.widget.TextView; 7 8 public class Productos extends Activity{ 9 10 11 @Override 12 protected void onCreate(Bundle savedInstanceState) { 13 14 super.onCreate(savedInstanceState); 15 setContentView(R.layout.activity_lista); 16 int i = 0; 17 18 TableLayout table = (TableLayout)this.findViewById(R.id.tableLayout); 19 for(i = 0; i<20 ; i++) 20 { 21 22 TableRow row = (TableRow)LayoutInflater.from(this).inflate(R.layout.fila, null); 23 24 ((TextView)row.findViewById(R.id.textView1)).setText("Elemento "+i); 25 table.addView(row); 26 } 27 table.requestLayout(); 28 29 30 } 31 32 33 34 35 }
Eso es todo por hoy, bonna nit!