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


Refreshing ArrayAdapter onResume

Estoy creando una aplicación de la lista de contactos usando Fragmentos donde un frag es una lista de nombres en la lista de contactos y el otro es el resto de los detalles.

Aquí está la clase que muestra la lista de nombres

public class MyListFragment extends ListFragment { private ContactStorage contactStorage = new ContactStorage(); public final static String TAG = "FRAGMENTS"; private MainActivity parent; ArrayAdapter<String> adapter; ArrayList<String> entries = new ArrayList<String>(); String array[]; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.list_layout, null); parent = (MainActivity) getActivity(); entries = contactStorage.getContactListNames(); adapter = new ArrayAdapter<String>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1, entries); setListAdapter(adapter); Log.d(TAG, "Adapter created"); array = contactStorage.getContactDetails(); return v; } @Override public void onResume() { super.onResume(); entries = contactStorage.getContactListNames(); adapter.notifyDataSetChanged(); Log.d(TAG, "List Frag Resumed"); } } 

El problema que estoy teniendo es que el ArrayAdapter no refresca en curriculum vitae.

Cuando se gira la pantalla, su multa como onCreateView () se ejecuta de nuevo, pero lo necesito para actualizar onResume. He mirado sobre este sitio cargas y no encontré nada sino "use notifyDataSetChanged ()" que no funciona.

2 Solutions collect form web for “Refreshing ArrayAdapter onResume”

El problema que está teniendo es que está sobrescribiendo la referencia de las entradas y no se está cambiando en el adaptador. Así es como puede arreglar esto

 @Override public void onResume() { super.onResume(); entries.clear(); entries.addAll(contactStorage.getContactListNames()); adapter.notifyDataSetChanged(); Log.d(TAG, "List Frag Resumed"); } 

Esto es un error común de hacer, es causado porque cuando se crea por primera vez una lista (en la memoria) y el campo de entries apunta a que, a continuación, le dice al adapter que mirar esa ubicación de memoria cuando se crea, pero onResume crear una Nueva lista en la memoria (cuando vuelve a obtener los nombres de la lista de contactos) y le dice a las entradas que apunte a esa nueva lista en la memoria, lo que debe hacer es reemplazar las entradas de la lista original por las entradas de la nueva lista, de esa manera El adapter seguirá haciendo referencia a la misma lista.

NotifyDataSetChanged () no funcionará para usted. Razones por las cuales

Su adaptador pierde referencia a su lista. Cuando inicializa el Adaptador toma una referencia de su arrayList y pasa a su superclase. Pero si reinicializa tu arrayList existente pierde la referencia por lo tanto el canal de comunicación con Adapter :(.

Siempre creando y agregando una nueva lista al adaptador. Hazlo así:

  1. Inicialice el arrayList mientras declara globalmente.
  2. Agregue la lista al adaptador directamente sin comprobar la condición nula y vacía. Configure el adaptador directamente en la lista (no compruebe si hay alguna condición). Adaptador le da la garantía de que donde quiera que se cambie los datos de arrayList se hará cargo, pero nunca perder la referencia.
  3. Agregue datos al arrayList Cada vez (si sus datos son completamente nuevos, puede llamar a adapter.clear () y arrayList.clear () antes de añadir datos a la lista), pero no establecer el adaptador ie Si los nuevos datos son Poblado en el arrayList que simplemente adapter.notifyDataSetChanged ()

Mantener la confianza en Documentaciones

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.