PDA

Ver la Versión Completa : problemas con Listview


macac0
15/05/15, 02:37:13
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:

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;
}
}

kriogeN
15/05/15, 09:01:20
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.

macac0
15/05/15, 12:26:10
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.