TransWikia.com

Obtener valores de un TableLayout

Stack Overflow en español Asked by Jesus Alejandro Nuñez Jaimez on December 28, 2021

Tengo una aplicación Android en la cual estoy haciendo un Scanner de códigos de barras, al mismo tiempo que se escanea el código consulta en la BD la información y la agrega a un TableLayout y así con cada elemento, una vez que el usuario termina de escanear hay un botón para guardar los datos, mi problema es que esos datos que se generan dinamicamente en la tabla necesito recorrerlos, ya lo logre de alguna manera el problema es que solo me devuelve el ultimo ítem escaneado y la ultima posición, es decir en mi tabla muestro un código y la descripción de este y cuando muestro con un Toast lo que devuelve al presionar el botón guardar, solo me devuelve la descripción (sin el código) y solo la ultima descripción, por otro lado cuando lo hago con un log.i me muestra toda la información que necesito, mi pregunta es como extraigo cada dato por separado o estoy haciendo algo mal, o estoy generando mal mi tabla dinámica.

Esta es mi función para rellenar la tabla con la consulta a la BD

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode,resultCode,data);

    if(result != null){
        if(result.getContents() != null){
            try{
                Statement stm = ConexionBD().createStatement();
                ResultSet rs = stm.executeQuery("SELECT * FROM detallebultos WHERE idDetalle='"+result.getContents()+"'");

                if(rs.next()){
                    //resultConsulta.setText(rs.getString(9));
                    TableLayout lista=findViewById(R.id.tablelayout);
                    String[]cadena={rs.getString("idDetalle"),rs.getString("Operation")};
                    TableRow row=new TableRow(this);
                    for(int i=0;i<2;i++) {
                        TextView textView = new TextView(this);
                        textView.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT));
                        textView.setText(cadena[i]);
                        row.addView(textView);
                    }
                    lista.addView(row);
                }
            }catch (Exception e){
                Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show();
            }
        }
        else{
            Toast.makeText(EscannerCodesActivity.this , "Cancelaste la lectura de codigo" , Toast.LENGTH_LONG).show();
        }
    }
}

Esta es mi función del boton de guardar

public void guardaDatos(){
    TableLayout table=findViewById(R.id.tablelayout);
    View child = table.getChildAt(1);
    if (child == null) {
        Toast.makeText(EscannerCodesActivity.this , "No hay datos por guardar" , Toast.LENGTH_LONG).show();
    }
    else {
        for (int i = 1; i < table.getChildCount(); i++) {
            View row = table.getChildAt(i);
            if(row instanceof TableRow){
                TableRow rowC = (TableRow)row;
        for(int j=0; j<rowC.getChildCount();j++){
            TextView texto = (TextView)rowC.getChildAt(j);
            String edttext = texto.getText().toString();
            Toast.makeText(EscannerCodesActivity.this , edttext , Toast.LENGTH_LONG).show();
            Log.i("Informacion:",edttext);

        }
            }
        }
    }
}
}

Esto es lo que me devuelve el Toast y esto lo que me devuelve el log.i

introducir la descripción de la imagen aquí

Si se dan cuenta el log si me muestra el código que necesito junto con su descripción.

introducir la descripción de la imagen aquí

Lo que no pasa con el toast solo me devuelve la ultima descripcion y sin el codigo.

One Answer

A mi me pasó algo parecido. Yo queria obtener unos datos (la id y la fecha) con una pulsación larga (setOnLongListener) de una TableRow creada dinamicamente y siempre me retormaba el último registro. Ya sé que esta pregunta es de hace tiempo y ya lo tendrás resuelto, pero por si hay alguien en la misma situación, yo lo resolví de la siguiente forma:

int intID = 0; 
int intFecha = 1; 
tvTablaFechaDelMesSeleccionado.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            TableRow tablerow = (TableRow)v.getParent();
            //extraen la id y la fecha
            TextView itemsID = (TextView) tablerow.getChildAt(intID);
            TextView itemsFecha = (TextView) tablerow.getChildAt(intFecha);
            //meter el dia y la id en una variable
            String iDdia = itemsID.getText().toString();
            String stFecha = itemsFecha.getText().toString();
            //para borrar el dia seleccionado
            borrarDiaSelect(iDdia ,stFecha);
            return true;
        } });

Answered by Fernando Piñon on December 28, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP