Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 15/05/15, 02:37:13
Array

[xs_avatar]
macac0 macac0 no está en línea
Usuario poco activo
 
Fecha de registro: may 2015
Mensajes: 2
Tu operador: Movistar

problemas con Listview

Lo primero hola a todos y gracias por este gran foro, llevo mucho tiempo visitandolo aunque no pusiera nada pues ni estoy preparado para ayudar ni necesitaba ayuda, ahora eso ha cambiado y necesito un poco de ayuda. Mi problema es que tengo un listview y lo recorro para sacar los datos que el usuario introduce en el, si el listview cabe entero en pantalla no hay ningun problema, todo funciona perfectamente, recojo los datos y los muestro sin ningun problema, pero si el listview no me cabe entero en pantalla ya que es dinamico y no se cuantos elementos tendra, es decir, si me toca hacer scroll para ver algun elemento ya no puedo recojer los datos del listview, me da un null pointer exception, alguien sabe a que puede ser debido esto??, agradeceria muchisimo cualquier tipo de ayuda, este es mi codigo:

Código:
public class ListaApuestas extends Activity{
    public BaseAdapter adaptador;
    protected static List<Apuesta> vectorApuestas = new ArrayList<Apuesta>();
    double dinerototal;
    int apuestatotal;
    int j = 0;
    double ganancia;
    double gananciaredondeada;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.lista_apuestas);
        adaptador = new ArrayAdapter(this,
                R.layout.elemento_lista,
                R.id.apuestatext,
                listaNombres());
        ListView listView = (ListView) findViewById(R.id.listView);
        listView.setAdapter(adaptador);
        Button b = (Button) this.findViewById(R.id.enviarlista);
        b.setOnClickListener(new View.OnClickListener() {

            @override
            public void onClick(View v) {
                comprobarGanancia();
                Intent i = new Intent(ListaApuestas.this, MostrarGanancia.class);
                i.putExtra("ganancia", gananciaredondeada);
                startActivity(i);
            }

        });
    }

    public List listaNombres(){
        Bundle extras = getIntent().getExtras();
        String apuesta = this.getIntent().getExtras().getString("text");
        apuestatotal = Integer.parseInt(apuesta);
        String dinero = extras.getString("text1");
        dinerototal = Double.parseDouble(dinero);

       ArrayList resultado = new ArrayList();
        for (int i=0; i<apuestatotal; i++){
            if (i<9){
                resultado.add("apuesta 0" + (i+1) + " odds ");
            } else {
                resultado.add("apuesta " + (i+1) + " odds ");
            }

        }
        return resultado;
    }

    public List crearListaApuestas() {
        ListView lv = (ListView)findViewById(R.id.listView);
        int count = lv.getAdapter().getCount();

        for (int i = 0; i < count; i++)
        {
            ViewGroup row = (ViewGroup) lv.getChildAt(i);
            CheckBox check = (CheckBox) row.findViewById(R.id.acertadocheck);
            TextView apuesta = (TextView) row.findViewById(R.id.apuestatext);
            EditText odds = (EditText) row.findViewById(R.id.oddstext);
            //  Get your controls from this ViewGroup and perform your task on them =)

            String apuestaString = apuesta.getText().toString();
            double oddsdouble = Double.parseDouble(odds.getText().toString());
            boolean checked = false;
            if (check.isChecked())
            {
             checked = true;
            }

            Apuesta apuestaArray = new Apuesta();
            apuestaArray.setNombreapuesta(apuestaString);
            apuestaArray.setOdds(oddsdouble);
            apuestaArray.setCheck(checked);
            vectorApuestas.add(apuestaArray);

        }

        return vectorApuestas;
    }
    
   public void comprobarGanancia() {

        List<Apuesta> apuestasSimples = crearListaApuestas();
        comprobarAciertos();
        long aciertos = j;
        ApuestaMultiple apuestaMultiple = new ApuestaMultiple(dinerototal, aciertos, apuestatotal, apuestasSimples);

        ganancia = apuestaMultiple.calcularGanancia();
        gananciaredondeada = (double) Math.round(ganancia * 100) / 100;
    }
}
Responder Con Cita


  #2  
Viejo 15/05/15, 09:01:20
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Los ListView tienen lo que se llama "Reciclado de vista", es decir, que si en la pantalla caben 5 elementos como mucho a la vez realmente sólo usa 6 y los va reutilizando para ir mostrando todos los datos.

Por eso cuando recorres una lista que tienes que hacer scroll no te funciona, porque los datos que están fuera de la pantalla ya no existen en el ListView hasta que vuelvan a ser visibles.

Lo que tienes que hacer es ir almacenando los datos conforme el usuario los introduce en un List o en otro tipo de estructura, y luego recorrerla.
Responder Con Cita
  #3  
Viejo 15/05/15, 12:26:10
Array

[xs_avatar]
macac0 macac0 no está en línea
Usuario poco activo
 
Fecha de registro: may 2015
Mensajes: 2
Tu operador: Movistar

Hola Kriogen, muchas gracias por tu respuesta pero tengo un pequeño problemilla, soy muy nuevo en el mundo de android y no se como almacenar los datos conforme el usuario los introduce en la listview, me gustaria, si es posible, que me dijeras que clase debo usar o algun sitio donde pueda leer una pequeña explicacion de como hacerlo, nada mas con que me des una pequeña pista ya me pongo yo a investigar por internet para ver lo que debo hacer, lo que si te agradeceria que me des esa pequeña pista si es posible.

Un saludo y de nuevo gracias por contestar.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 04:29:48 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /