Me pregunto cómo debería implementar un ListAdapter
que carga sus vistas de forma asíncrona en un ListView
? Quiero hacer esto porque estoy completando la lista con información de mi base de datos, lo que hace que mi actividad sea un poco lenta de cargar a veces.cómo llenar una vista de lista de forma asincrónica?
Respuesta
Puede usar un AsyncTask
y utilizar los métodos onPostExecute
para publicar ish los resultados recién cargadas:
private ArrayAdapter adapter = new YourArrayAdapter();
private class YourAsyncTask extends AsyncTask<Void, Void, List<YourItem>> {
@Override
protected void onPreExecute() {
// start loading animation maybe?
adapter.clear(); // clear "old" entries (optional)
}
@Override
protected List<YourItem> doInBackground(Void... params) {
// everything in here gets executed in a separate thread
return DataBase.getItems();
}
@Override
protected void onPostExecute(List<YourItem> items) {
// stop the loading animation or something
adapter.addAll(items);
}
}
Use AsyncTask.
Eso puede ayudarlo a recuperar sus datos en segundo plano.
utilizo AsyncTasks frecuencia, pero ¿Cómo se implementa en un listadapter? Estoy intentando crear una lista donde se muestre una vista cuando termine de cargarse. El uso de una asynctask para establecer un adaptador de lista cargará toda la lista en el fondo y luego mostrará la información. Estoy buscando una implementación que cargue un elemento de la lista a la vez y lo muestre en la lista. –
Lo más fácil es usar un AsyncTask hacer la carga y llamar publishProgress
que se carga cada elemento (o, si se desea cargar todos los elementos para que aparezcan todos a la vez, actualizar la interfaz de usuario en onPostExecute
Es posible que .notifyDataSetChanged() sea lo que está buscando. Cada vez que agrega un nuevo elemento a la lista que respalda ArrayAdapter, puede llamar a .notifyDataSetChanged() en esa instancia de adaptador para indicarle que actualice. De esta forma, su ListView puede acumule y muestre gradualmente cada elemento a medida que se agregan a la lista.
El mejor método que he visto hasta ahora es de CommonsWare. Se encontró en este relacionado answer.
public class AsyncDemo extends ListActivity {
private static final String[] items={"lorem", "ipsum", "dolor",
"sit", "amet", "consectetuer",
"adipiscing", "elit", "morbi",
"vel", "ligula", "vitae",
"arcu", "aliquet", "mollis",
"etiam", "vel", "erat",
"placerat", "ante",
"porttitor", "sodales",
"pellentesque", "augue",
"purus"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
new ArrayList<String>()));
new AddStringTask().execute();
}
class AddStringTask extends AsyncTask<Void, String, Void> {
@Override
protected Void doInBackground(Void... unused) {
for (String item : items) {
publishProgress(item);
SystemClock.sleep(200);
}
return(null);
}
@Override
protected void onProgressUpdate(String... item) {
((ArrayAdapter<String>)getListAdapter()).add(item[0]);
}
@Override
protected void onPostExecute(Void unused) {
Toast
.makeText(AsyncDemo.this, "Done!", Toast.LENGTH_SHORT)
.show();
}
}
}
Con Kotlin y las bibliotecas de extensión Kotlin, esta tarea ha conseguido manera más fácil. Puede usar la construcción doAsync/uiThread en una biblioteca llamada Anko con una fracción del código. En el tutorial de enlaces a continuación, utilizo esta biblioteca para completar un ListView con comillas que llaman a una API REST de forma asincrónica con Kotlin. Kotlin está totalmente integrado en Android Estudio:
http://www.todroid.com/creating-a-stock-pricing-application-with-kotlin-for-android/
- 1. ¿Cómo puedo agregar filas a una vista de lista de forma asincrónica?
- 2. Llenar una lista desplegable de forma dinámica con Javascript/jQuery
- 3. Cómo llenar una lista
- 4. ¿Cómo deshacerse de forma asincrónica?
- 5. forma de Scala de llenar una plantilla?
- 6. ¿Cómo llenar una vista de lista jQuery Mobile con datos JSON del servidor?
- 7. Llenar lista de la matriz
- 8. Llenar una matriz (o una lista de arrays) de SqlDataReader
- 9. ¿Cómo usar WebClient dentro de ASP.NET MVC de forma asincrónica?
- 10. ¿Cuál es la forma más fácil de llenar los vacíos en una lista de números?
- 11. jqGrid, cómo llenar la lista de selección de la consulta
- 12. cómo llenar un modelo de vista en ASP.NET MVC3
- 13. Cómo ejecutar un código de forma asincrónica usando las tareas
- 14. ¿Cómo llenar una lista desplegable con datos json en jquery?
- 15. ¿Cómo ejecutar un script PHP de forma asincrónica?
- 16. ¿Mejor forma de llenar un hash Ruby?
- 17. android cargar datos de forma asincrónica en la vista del buscapersonas
- 18. Forma correcta de obtener varios guiones de forma asincrónica utilizando Jquery con devolución de llamada lista para documentos
- 19. Cómo llenar ListBoxFor en Mvc3?
- 20. ¿Cómo obtener una lista de encabezados de columna de una vista de lista basada en displayindex?
- 21. ¿Cómo poner Editable edittext dentro de una vista de lista?
- 22. serialización de protobuf asincrónica
- 23. Cómo reemplazar (llenar) Ninguna entrada en la Lista de opciones de otra lista usando Scala idiomático?
- 24. validación modelo de vista para una lista
- 25. Visualización de datos de varias tablas en una vista en forma de lista - ASP.Net MVC
- 26. SqlDataAdapter.Fill - Aproximación asincrónica
- 27. Ejecutar una declaración de SQL grande y llenar una vista de cuadrícula
- 28. ejecutar paquete SSIS o DTS de forma asincrónica desde ASP.NET
- 29. de forma asincrónica cargar un BitmapImage en C# usando WPF
- 30. ¿Los temporizadores .NET se ejecutan de forma asincrónica?
¡gracias! intentaré esto cuando vuelva a trabajar mañana :) no había pensado en hacerlo de esta manera –
Hola, ¿qué tipo de adaptador puede ser claro o agregar elemento? – Hamidreza