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


Mejor manera de actualizar el adaptador / ListView en Android

Mi libro, "Hello Android" da esto como una forma de usar un ayudante de db personalizado, configurar un cursor y luego configurar un adaptador de la siguiente manera:

Cursor cursor CustomDatabaseHelper test = new CustomDatabaseHelper(this); try { cursor = getData(); showData(cursor); } finally { test.close(); } 

Con esto, sin embargo, cada vez que necesito actualizar el conjunto de datos, necesito seguir ejecutando este bloque de código (que se pone un poco difícil dentro de un onClick () para un botón debido a que "esto" no está disponible.

¿Es esta la mejor manera de actualizar el conjunto de datos, o debería mirar hacia la eliminación de la .close y emitir un adaptador.notifyDataSetChanged ()? Si hago esto, a veces tengo una fuerza cercana como (y no puedo recordar en este momento), pero a veces no se puede eliminar correctamente – creo que esto puede ser porque la base de datos está abierta y se intenta abrir de nuevo.

¿Deberíamos también declarar las variables de los Cursores, DatabaseHelpers y Adapter en la clase (fuera de OnCreate) para que sean accesibles a todas las funciones?

Me doy cuenta de que esto es sólo mala programación en esta etapa, pero estoy tratando de obtener algunos consejos sobre la mejor manera de hacer las cosas.

    9 Solutions collect form web for “Mejor manera de actualizar el adaptador / ListView en Android”

    Debe utilizar adapter.notifyDataSetChanged() . ¿Qué dice el registro cuando usa eso?

    Simplemente agregue estos códigos antes de configurar el Adapter funciona para mí:

      listView.destroyDrawingCache(); listView.setVisibility(ListView.INVISIBLE); listView.setVisibility(ListView.VISIBLE); 

    O directamente puede utilizar debajo del método después del cambio Recurso de datos.

      adapter.notifyDataSetChanged() 

    El siguiente código funciona perfecto para mí

     EfficientAdapter adp = (EfficientAdapter) QuickList.getAdapter(); adp.UpdateDataList(EfficientAdapter.MY_DATA); adp.notifyDataSetChanged(); QuickList.invalidateViews(); QuickList.scrollBy(0, 0); 

    Mejor manera de actualizar el adaptador / ListView en Android

    No sólo llamar a notifyDataSetChanged () actualizará los datos de ListView, setAdapter() debe llamar antes para cargar la información correctamente:

      listView.setAdapter(adapter); adapter.notifyDataSetChanged(); 

    Si está usando LoaderManager intente con esta declaración:

     getLoaderManager().restartLoader(0, null, this); 
     adapter.notifyDataSetChanged(); 

    Tal vez su problema es el momento en que la búsqueda se realiza en la base de datos. En sus ciclos Fragment Override de su Fragment.java para averiguar: pruebe con los métodos:

     @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_x, container, false); //Your query and ListView code probably will be here Log.i("FragmentX", "Step OnCreateView");// Try with it return rootView; } 

    Pruebe de forma similar poner Log.i … "onStart" y "onResume".

    Finalmente cortar el código en "onCreate" e ponerlo en "onStart" por ejemplo:

     @Override public void onStart(){ super.onStart(); Log.i("FragmentX","Step OnStart"); dbManager = new DBManager(getContext()); Cursor cursor = dbManager.getAllNames(); listView = (ListView)getView().findViewById(R.id.lvNames); adapter = new CustomCursorAdapter(getContext(),cursor,0);// your adapter adapter.notifyDataSetChanged(); listView.setAdapter(adapter); } 

    Simplemente escribe en tu Custom ArrayAdaper este código:

     private List<Cart_items> customListviewList ; refreshEvents(carts); public void refreshEvents(List<Cart_items> events) { this.customListviewList.clear(); this.customListviewList.addAll(events); notifyDataSetChanged(); } 

    Sólo tienes que escribir en tu Custom ArrayAdaper este código:

     public void swapItems(ArrayList<Item> arrayList) { this.clear(); this.addAll(arrayList); } 
      FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.