I am filling in a tableLayout manually, but I can not access the text of the button that is inside the row.
I have a Table class
public class Tabla {
private TableLayout tabla; // Layout donde se pintará la tabla
private ArrayList<TableRow> filas; // Array de las filas de la tabla
private Activity actividad;
private Resources rs;
private String Elemento;
private int FILAS, COLUMNAS; // Filas y columnas de nuestra tabla
/**
* Constructor de la tabla
* @param actividad Actividad donde va a estar la tabla
* @param tabla TableLayout donde se pintará la tabla
*/
public Tabla(Activity actividad, TableLayout tabla)
{
this.actividad = actividad;
this.tabla = tabla;
rs = this.actividad.getResources();
FILAS = COLUMNAS = 0;
filas = new ArrayList<TableRow>();
}
/**
* Agrega una fila a la tabla
* @param elementos Elementos de la fila
*/
public void agregarFilaTabla(ArrayList<String> elementos)
{
TableRow.LayoutParams layoutCelda;
TableRow.LayoutParams layoutFila = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT);
TableRow fila = new TableRow(actividad);
fila.setLayoutParams(layoutFila);
for(int i = 0; i< elementos.size(); i++)
{
TextView texto = new TextView(actividad);
Button mbtn = new Button(actividad);
Elemento =String.valueOf(elementos.get(i));
mbtn.setText(String.valueOf(elementos.get(i)));
texto.setText(String.valueOf(elementos.get(i)));
texto.setGravity(Gravity.CENTER_HORIZONTAL);
layoutCelda = new TableRow.LayoutParams(obtenerAnchoPixelesTexto(texto.getText().toString()), TableRow.LayoutParams.WRAP_CONTENT);
texto.setLayoutParams(layoutCelda);
mbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i(TAG, "onClick: brn "+ view.toString());
}
});
fila.addView(mbtn);
}
tabla.addView(fila);
filas.add(fila);
FILAS++;
}
/**
* Obtiene el ancho en píxeles de un texto en un String
* @param texto Texto
* @return Ancho en píxeles del texto
*/
private int obtenerAnchoPixelesTexto(String texto)
{
Paint p = new Paint();
Rect bounds = new Rect();
p.setTextSize(50);
p.getTextBounds(texto, 0, texto.length(), bounds);
return bounds.width();
}
}
But the setOnClickListener always returns the last position of the table, that is, the last thing that happens through the variable ArrayList elements
This way I fill the table
Tabla tabla = new Tabla(this, (TableLayout)findViewById(R.id.tabla));
for(int i = 0; i < 15; i++)
{
ArrayList<String> elementos = new ArrayList<String>();
elementos.add(Integer.toString(i));
elementos.add("btn [" + i + ", 0]");
elementos.add("Casilla [" + i + ", 1]");
elementos.add("Casilla [" + i + ", 2]");
elementos.add("Casilla [" + i + ", 3]");
tabla.agregarFilaTabla(elementos);
}
The logi returns me "Box 14.3