entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Como saber que ToggleButtons están presionados dentro del Adaptador

Aquí donde creo el adaptador:

final CustomListViewAdapterIngredientes adapter = new CustomListViewAdapterIngredientes(
                this, items);
        listProductos.setAdapter(adapter);

Justamente debajo añado el click del botón:

insertarCarrito.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View arg0) {

        });

El botón está fuera del adaptador, así que como sé cuáles están seleccionados, para así ya después almacenarlos en la BD.

1 Respuesta

0voto

white Puntos75880

Intenta recorrer tu adaptador y obtener todos los items ListViewItem por su posición:

insertarCarrito.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            for (int i = 0; i < adapter.getCount(); i++) {

                String ingrediente = adapter.getItem(i).getNombre();
                boolean isChecked = adapter.getItem(i).isChecked();

                if (isChecked) {
                    Log.d("debug", "checked => " + ingrediente);
                }
            }
        }
    });

en la linea; String ingrediente = adapter.getItem(i).getNombre(); estoy asumiendo que tienes en tu clase ListViewItem el metodo getNombre.

0voto

danielreales7 comentado

En la clase ListViewItem tengo lo siguiente:

class ListViewItem {
    public String ThumbnailResource;
    public String Nombre;
    public String Precio;
    boolean isOn = false;
}

Querrás decir en mi adaptador no? Donde tengo todo esto:

public class CustomListViewAdapterIngredientes extends BaseAdapter {

LayoutInflater inflater;
List<ListViewItem> items;

public CustomListViewAdapterIngredientes(Activity context,
        List<ListViewItem> items) {
    super();

    this.items = items;
    this.inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return items.size();
}

.... etc.
Dentro de eso crear los 2 métodos que me has puesto arriba y recorro igual el array de items.
Me he perdido un poco en los métodos a crear.
Lo demás debería de funcionar perfectamente con lo que me has puesto.

0voto

white comentado

sucede que en esta parte: adapter.getItem(i)estoy obteniendo una instancia de la clase ListViewItem entonces supuse que tenias getters y setters en esa clase, yo en lo personal te recomiendo usar getters y setters para la clase ListViewItem

class ListViewItem {
    private String ThumbnailResource;
    private String Nombre;
    private String Precio;
    private isOn = false;

    public String getNombre(){ return Nombre; }
    public void setNombre(String nombre){ Nombre = nombre }

    public String getPrecio(){ return Precio; }
    public void setPrecio(String precio){ Precio = precio }

    public boolean isChecked(){ return isOn; }
    public void setChecked(boolean checked){ isOn = checked }
}

de todas formas, para el código actual que tienes intenta así:

insertarCarrito.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        for (int i = 0; i < adapter.getCount(); i++) {

            String ingrediente = adapter.getItem(i).Nombre;
            boolean isChecked = adapter.getItem(i).isOn;

            if (isChecked) {
                Log.d("debug", "checked => " + ingrediente);
            }
        }
    }
});

0voto

danielreales7 comentado

Me está pasando algo que estoy teniendo problemas.
La clase ListViewItem, la tengo metida en una actividad. Y ahora tengo este método:

public void getData() {
    String result = "";
    InputStream isr = null;
    List<ListViewItem> items = new ArrayList<PizzasIngredientes.ListViewItem>();
    try {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(
                "http://xxxxx/xxx/xxx/ingredientes.php");
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        isr = entity.getContent();
    } catch (Exception e) {
        e.printStackTrace();
    }
    // convert response to string
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                isr, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        isr.close();

        result = sb.toString();
    } catch (Exception e) {
        e.printStackTrace();
    }

    // parse json data
    try {
        String s = "";
        JSONArray jArray = new JSONArray(result);
        int contador = 0;
        for (int i = 0; i < jArray.length(); i++) {
            final JSONObject json = jArray.getJSONObject(i);
            items.add(new ListViewItem() {
                {
                    ThumbnailResource = json.getString("RUTA_IMAGEN");
                    Nombre = json.getString("NOMBRE");
                    Precio = json.getString("PRECIO");
                }
            });
        }

        final CustomListViewAdapterIngredientes adapter = new CustomListViewAdapterIngredientes(
                this, items);
        listProductos.setAdapter(adapter);

        insertarCarrito.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                for (int i = 0; i < adapter.getCount(); i++) {

                    String ingrediente = adapter.getItem(i).Nombre;
                    boolean isChecked = adapter.getItem(i).isOn;

                    if (isChecked) {
                        Log.d("debug", "checked => " + ingrediente);
                    }
                }
                //Intent i = new Intent(PizzasIngredientes.this, Bienvenida.class);
                //i.putExtra("user", CorreoPersonal);
                //startActivity(i);

            }

        });

    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }

}

Entonces cuando pongo lo que me has dicho de String ingrediente = adapter.getItem(i).Nombre; No me reconoce Nombre, es problema de la clase donde está creada no?

0voto

white comentado

Te sale algun error? viste si en logcat aparece el mensaje con etiqueta debug "checked => x"?

0voto

danielreales7 comentado

No digo al poner lo que tu me has dicho me sale en rojo, como que no detecta Nombre ni isOn en la clase, sabes?

0voto

white comentado

intenta asi:

String ingrediente = ((ListViewItem) adapter.getItem(i)).Nombre;
boolean isChecked = ((ListViewItem) adapter.getItem(i)).isOn;

0voto

danielreales7 comentado

Vale, ahora el error que me da es el siguiente:

06-11 15:52:12.979: E/AndroidRuntime(2889): java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.example.jemis.PizzasIngredientes$ListViewItem.Nombre' on a null object reference

0voto

white comentado

Como tienes los metodos getItem(), getCount() y getItemId() en tu adaptador CustomListViewAdapterIngredientes? agrega el codigo para verificar que devuelvan la información correcta.

0voto

danielreales7 comentado

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return items.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

0voto

white comentado

estas retornando un valor nulo en el metodo getItem, de ahi el error null object reference reemplaza los metodos getItem y getItemId por:

@Override
public Object getItem(int position) {
    return items.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

0voto

danielreales7 comentado

Me ha devuelto perfectamente los datos! Eres un genio, muchísimas gracias por todo.

0voto

white comentado

me alegro se haya resuelto ;)

saludos!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta