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


¿Cómo actualizar ListView en ListFragment de FragmentActivity?

Estoy utilizando un ListFragment dentro de un FragmentActivity junto con un SimpleCursorAdapter y un CursorLoader modificado. El CursorLoader modificado simplemente emite rawQueries – no hay otros cambios.

En algún punto en el FragmentActivity necesito refetch el data / cursor que alimenta el ListView en el ListFragment.

  • Vista lateral con XML Android
  • Cómo configurar la etiqueta de entero a un widget en el archivo de diseño xml?
  • ¿Cómo implementar el almacenamiento en caché en la aplicación android para los resultados de REST API?
  • Best REST Client Framework / Utilidad en Android
  • Android NDK / JNI - referencia indefinida a la función definida en el archivo de encabezado personalizado
  • Restaurar el diseño predeterminado de la barra de acciones
  • ¿Cómo puedo hacer eso?

    Muchas gracias de antemano.

    Aquí está el FragmentActivity que llama a un método en el ListFragment:

    public class ActivityList extends FragmentActivity { @Override protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent) { ... processUpdateList(); } ... private void processUpdateList() { Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragmentlist); if (fragment != null) { ((FragmentList) fragment).requeryList(); } } } 

    Y aquí está el ListFragment con el método que debe iniciar una re-consulta, volver a cargar o volver a pintar el ListView. ListView.invalidate () no ayudó – no cambió los datos mostrados.

     public class FragmentList extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> { private SimpleCursorAdapter adapter; private Context context; private ListView listView; public void requeryList() { // listView.invalidate(); didn't re-query // TODO: How??? } @Override public void onActivityCreated(final Bundle bundle) { super.onActivityCreated(bundle); context = getActivity().getApplicationContext(); listView = getListView(); getActivity().getSupportLoaderManager().initLoader(MyConstants.LDR_TABLE1LIST, null, this); adapter = new SimpleCursorAdapter(context, R.layout.fragmentlist_row, null, new String[] { Table1.DESCRIPTION }, new int[] { R.id.fragmentlist_row_description }, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); setListAdapter(adapter); setListShown(false); listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); } @Override public Loader<Cursor> onCreateLoader(final int id, final Bundle bundle) { MyCursorLoader loader = null; switch (id) { case MyConstants.LDR_TABLE1LIST: loader = new MyCursorLoader(context, MySQLiteOpenHelper.TABLE1_FETCH, null); break; } return loader; } @Override public void onLoaderReset(final Loader<Cursor> loader) { adapter.swapCursor(null); } @Override public void onLoadFinished(final Loader<Cursor> loader, final Cursor cursor) { adapter.swapCursor(cursor); setListShown(true); } } 

  • Eliminar etiquetas BottomNavigationView
  • Error de paquete de aplicación firmada de exportación de Android
  • Android Wi-Fi Direct leer la intensidad de la señal rssi
  • Android: ¿Cómo agregar R.raw al proyecto?
  • ¿Cómo ocultar la barra de herramientas mientras se desplaza listview? (Al igual que google play tienda)
  • Gestión de memoria HttpClient
  • 3 Solutions collect form web for “¿Cómo actualizar ListView en ListFragment de FragmentActivity?”

    Intente llamar al método restartLoader(MyConstants.LDR_TABLE1LIST, null, this); El LoaderManager proporcionado en el método de requeryList() .

    No deberías llamar a notifyDataSetChanged() : el Loader se encarga de eso por ti. Tu código parece bastante bueno; No veo inmediatamente nada malo. Para referencia, sugiero que compares tu código con com.example.android.apis.app/LoaderThrottle.java en la aplicación de ejemplo API Demos .

    Los cargadores reutilizarán un Cursor siempre que sea posible. Si solicita un cargador para un conjunto de datos que no ha cambiado, el cargador es inteligente y devolver el cursor a través de onLoadFinished sin realizar ningún trabajo adicional, ni siquiera establecer la posición del cursor en -1.

    Intente llamar a Cursor.moveToPosition(-1) en onLoadFinished() para evitar este problema.

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