Foros del Web » Programando para Internet » Android »

[SOLUCIONADO] Problema al refrescar ListView

Estas en el tema de Problema al refrescar ListView en el foro de Android en Foros del Web. Buenos días. Tengo un ListView al que le paso a un adaptador: lstarea = (ListView) findViewById(R.id.lstLista); ArrayList<String> areas = new ArrayList<String>(); ArrayAdapter<String> adaptador= new ArrayAdapter<String>(this, ...
  #1 (permalink)  
Antiguo 06/02/2014, 05:52
 
Fecha de Ingreso: septiembre-2012
Mensajes: 16
Antigüedad: 12 años, 2 meses
Puntos: 0
Problema al refrescar ListView

Buenos días.

Tengo un ListView al que le paso a un adaptador:

lstarea = (ListView) findViewById(R.id.lstLista);

ArrayList<String> areas = new ArrayList<String>();

ArrayAdapter<String> adaptador= new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, areas);

lstarea.setAdapter(adaptador);


Después de esto tengo un thread que me coge los datos a través de un servicio web y me mete valores al ArrayList areas:

new Thread(new Runnable() {
public void run() {
tarea();
}
}).start();

Hasta aquí todo bien, el servicio web se lleva a cabo bien, dentro del método tarea(), areas tiene los valores correctos.

No sé donde incluir adaptador.setNotifyOnChange(true); ya que si lo pongo en el método tarea() me peta. Actualmente lo tengo en el onCreate despues del thread pero actuliza los datos cando quiere, unas veces si y otras no y no entiendo por qué, cuando siempre me recupera bien los datos del servicio web por que me imprime el JSON en el LogCat.

¿Alguna sugerencia?
  #2 (permalink)  
Antiguo 10/02/2014, 22:23
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problema al refrescar ListView

En lugar de usar threads planos puedes usar AsyncTask. http://developer.android.com/referen...AsyncTask.html

Porque si inicias un nuevo thread no puedes interactuar con la GUI así nada mas.

En onPostExecute pones todo lo necesario para actualizar tu listview y listo.
  #3 (permalink)  
Antiguo 15/02/2014, 04:26
 
Fecha de Ingreso: septiembre-2012
Mensajes: 16
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Problema al refrescar ListView

Muchas gracias por responder.

Voy a investigar un poco lo que me has dicho y ya contaré resultados.

Un saludo.
  #4 (permalink)  
Antiguo 15/02/2014, 06:02
 
Fecha de Ingreso: septiembre-2012
Mensajes: 16
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Problema al refrescar ListView

Pues probando tú solución me dice que adaptador está a null en el método onPostExecute...


Declaración de mi adaptador:


public class Areas extends Activity {

ListView lstarea;
ArrayList<String> areas = new ArrayList<String>();
ArrayList<String> Idareas = new ArrayList<String>();
ArrayAdapter<String> adaptador;
Button crearArea;
Button Invitaciones;


Inicialización de mi adaptador:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_areas);

// se crea la lista con las areas disponibles para el usuario

crearArea = (Button) findViewById(R.id.btnActividadCrearArea);
Invitaciones = (Button) findViewById(R.id.btnActividadInvitaciones);
Refrescar = (Button) findViewById(R.id.btnRefrescar);

lstarea = (ListView) findViewById(R.id.lstLista);

ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, areas);

lstarea.setAdapter(adaptador);


Llamada a la AsyncTask dentro del onCreate:

new tarea().execute();


dentro de:

public class tarea extends AsyncTask<Void, Void, Void> {


llamada al método onPostExecute (el resto de métodos de la AsyncTask funcionan bien):

@Override
protected void onPostExecute(Void result) {
adaptador.notifyDataSetChanged();
}

Aquí me dice que mi adaptador está a null
  #5 (permalink)  
Antiguo 15/02/2014, 06:33
 
Fecha de Ingreso: septiembre-2012
Mensajes: 16
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Problema al refrescar ListView

He comprobado que el adaptador que me coge es el que está fuera del onCreate sin inicializar, por eso me dice que está a null. ¿De qué forma puedo hacer que se refiera al del onCreate?
  #6 (permalink)  
Antiguo 15/02/2014, 06:40
 
Fecha de Ingreso: septiembre-2012
Mensajes: 16
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Problema al refrescar ListView

finalmente he creado el adaptador en el onPostExecute en vez de refrescarlo y funciona.

@Override
protected void onPostExecute(Void result) {

adaptador = new ArrayAdapter<String>(Areas.this,
android.R.layout.simple_list_item_1, areas);
lstarea.setAdapter(adaptador);
}

Muchas gracias por ayudarme, sin ti hubiese estado dando palos de ciego con los thread

Etiquetas: listview, refrescar, view
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:01.