Cómo restablecer el ListView con el ArrayAdapter después de buscar datos

Estoy usando un ListAdapter para poblar un ListView como este:

static final String[] PROBLEMS = new String[] {"one", "two", "three" }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setListAdapter(new ArrayAdapter<String>(this, R.layout.my_problems, PROBLEMS)); ListView lv = getListView(); lv.setTextFilterEnabled(true); 

Y después de que estoy haciendo una llamada remota a mi servidor para obtener más datos para esa lista con una llamada AsyncTask, y cuando recibo los datos de nuevo desde el servidor no sé cómo rellenar y restablecer el ListView. Hasta ahora tengo algo como esto:

  @Override protected void onPostExecute(String result) { // Unwrap the stuff from the JSON string String problem_title = null; String problem_id = null; try { JSONArray obj = new JSONArray(result); JSONObject o = obj.getJSONObject(0); Log.d( "Title: " , "" + o.getString("problem_title") ); Log.d( "id: " , "" + o.getString("problem_id") ); problem_title = o.getString("problem_title"); problem_id = o.getString("problem_id"); } catch ( Exception e ) { } // Now not sure what to do :) // How do I reset the list that I had set up above? } 

Puedo hacer el resultado en datos apropiadamente estructurados para restablecer la lista, pero no estoy seguro de cómo se hace. ¿Puede ayudarme alguien, por favor? 🙂

Lo uso de esta manera,

  values = new ArrayList<String>(); //put anything you want in values as start adapter = new ArrayAdapter<String>(this,R.layout.notification, values); setListAdapter(adapter); 

entonces

  //change values array with your new data then update the adapter adapter.notifyDataSetChanged(); 

Entonces el contenido de listview cambiará en el momento en que ejecute esta función

No es necesario reinicializar el adaptador, si sólo desea cambiar el conjunto de datos. Pruebe el siguiente código:

 adapter.clear(); for(int i = 0;i<categoriesArray.length;i++){ adapter.add(categoriesArray[i]); } 

Después de que si es necesario, puede notificar el cambio al adaptador también, aunque no debería ser necesario.

 adapter.notifyDataSetChanged(); 

Si está apuntando al nivel de API 11 o superior, puede utilizar el método addAll () en el adaptador. Ya que es más eficiente.

 adapter.clear(); adapter.addAll(categoriesArray); 
 adapter.notifyDataSetChanged(); 

Es una buena opción para hacer esto, pero a veces eso no funcionará como necesitamos. En ese caso, usted puede setadapter de nuevo y su listview obtener actualizado. Pero esto no es una buena opción para hacer porque genera listview completo de nuevo por lo que este rendimiento de la causa muy hacia abajo. Y tu aplicación se pone lenta.

  • Lotes de GC cuando se desplaza ListView (con el patrón de titular)
  • ListView en el widget agrega aleatoriamente los elementos en el desplazamiento y el cambio de tamaño (vistas remotas anidadas)
  • Android desplácese hacia arriba ocultar vista y desplácese hacia abajo mostrar el efecto de vista como twitter
  • A veces listView.getChildAt (int index) devuelve NULL (Android)
  • Cómo crear ListView multinivel en Android
  • Pie de página fijo y siempre visible debajo de ListFragment
  • La URL no se puede emitir a String
  • Android: establece la vista vacía en una vista de lista
  • Agregar elementos a ListView, mantener la posición de desplazamiento y NO ver un salto de desplazamiento
  • Adaptador personalizado getView () no se está utilizando la biblioteca PullToRefresh
  • Explicación de state_activated, state_selected, state_pressed, state_focused para ListView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.