Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android – Agregar y mostrar elementos a ListView uno a la vez usando un ArrayAdapter

Estoy usando un ArrayAdapter para agregar elementos a un ListView personalizado y mostrar los resultados en mi aplicación de Android. El problema que estoy teniendo es que el ArrayAdapter parece esperar hasta que todos los artículos estén en él antes de que muestre la opinión. Es decir, cuando agrego los elementos al ArrayAdapter y llamo a notifyDataSetChanged, no actualiza ListView para mostrar el elemento agregado. Espera hasta que se agreguen todos los elementos y se llama a GetView antes de mostrar los elementos.

Lo que me gustaría hacer es mostrar el elemento inmediatamente después de añadirlo al ListView. es posible?

  • Implementación de eventos similares a C # en Android / Java
  • Manejar la tecla de retroceso cuando el último fragmento se disparó
  • Clasificación de ListView por nombre del producto con adaptador personalizado?
  • Versión de Lite / Pro vs Opción de actualización de facturación en la aplicación
  • ID de registro canónico y formato ID de mensaje
  • No se puede resolver el objetivo 'Google Inc.: API de Google: 15'
  • Creo que el código pertinente es el siguiente:

    r_adapter = new ReminderAdapater(Activity_ContentSearch.this, R.layout.search_listitem, myList); listView.setAdapter(r_adapter); ... r_adapter.notifyDataSetChanged(); r_adapter.clear(); for(int i = 0; i < myList.size(); i++) { r_adapter.add(myList.get(i)); r_adapter.notifyDataSetChanged(); } 

    Como puede ver, aunque estoy llamando a notifyDataSetChanged después del método add, en realidad no actualiza la vista. Después de que ha terminado el bucle anterior la vista se actualiza finalmente (basado en lo que sé, eso es porque GetView no se llama hasta después de esta sección del código se hace).

    Intenté anular el método de adición de mi ArrayAdapter personalizado sin suerte, ya que no tengo acceso a la vista en ese método.

    Cualquier ayuda sera bienvenida 🙂

    Bara

  • Autorización Oauth 2.0 para LinkedIn en Android
  • ¿Es el navegador Android capaz de realizar una transformación xsl?
  • El archivo de lectura del directorio de activos lanza FileNotFoundException
  • Android ClickableSpan obtener texto onClick ()
  • ¿Cómo crear un divisor simple en el nuevo NavigationView?
  • Enlaces de datos con oyentes personalizados en la vista personalizada
  • One Solution collect form web for “Android – Agregar y mostrar elementos a ListView uno a la vez usando un ArrayAdapter”

    La interfaz de usuario de Android tiene un único subproceso. No devuelve el control a Android desde el hilo de la aplicación principal cada vez que agrega una entrada al adaptador. Por lo tanto, Android no tiene la oportunidad de mostrar sus entradas hasta que regrese el control, y no lo está haciendo hasta que haya completado su adaptador en su totalidad.

    Este es un ejemplo que muestra el uso de un AsyncTask para llenar un ArrayAdapter progresivamente a través de un hilo de fondo.

     /*** Copyright (c) 2008-2012 CommonsWare, LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. From _The Busy Coder's Guide to Android Development_ http://commonsware.com/Android */ package com.commonsware.android.async; import android.app.ListActivity; import android.os.AsyncTask; import android.os.Bundle; import android.os.SystemClock; import android.widget.ArrayAdapter; import android.widget.Toast; import java.util.ArrayList; 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); } @SuppressWarnings("unchecked") @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(); } } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.