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


CursorLoader para varios ContentProviders

Necesito crear un ListAdapter que presente datos de varios ContentProviders. Los propios ContentProviders representan una tabla cada una de la base de datos relacional.

Quiero utilizar el sistema CursorLoader para recuperar datos agregados en ListView. ¿Es esto posible hacer con 1 cargador o necesito utilizar cargadores múltiples? Prefiero usar uno.

  • Android: mostrar tarjetas como el diseño como en Google Keep
  • Preferencias personalizadasCategorías
  • Programáticamente activar la pantalla en android
  • Estilos de Barra de Acción Contextual
  • Cómo cambiar la etiqueta de actividad de Android
  • ¿Cómo actualizar un GridView?
  • No estoy seguro de cómo puedo tener 2 ContentProviders interactuar entre sí más allá de hacer la combinación manualmente en código que no parece una gran opción tampoco.

  • Botón personalizado con fondo extraíble: diferencia de relleno en Android 4 vs. Android 2.3
  • Webview Cargar contenido HTML
  • Android: ¿es posible agregar un enlace que se puede hacer clic en un recurso de cadena
  • ¿Hay alguna forma de habilitar las barras de desplazamiento para RecyclerView en código?
  • Obtener recursos de otro apk
  • Notificaciones Push utilizando el servidor Rails
  • 3 Solutions collect form web for “CursorLoader para varios ContentProviders”

    Tendrás que escribir una clase de cargador personalizado. Por ejemplo:

    public class FooLoader extends AsyncTaskLoader { Context context; public FooLoader(Context context) { super(context); this.context = context; } @Override public Cursor loadInBackground() { Log.d(TAG, "loadInBackground"); YourDatabase dbHelper = new YourDataBase(context); SQLiteDatabase db= dbHelper.getReadableDatabase(); /*** create a custom cursor whether it is join of multiple tables or complex query**/ Cursor cursor = db.query(<TableName>, null,null, null, null, null, null, null); return cursor; } } 

    En el método onCreate() la actividad llamante o fragmentos, tendría que llamar a la clase loader personalizada:

     public class MyFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "onCreate():" + mContent); Loader loader = getLoaderManager().initLoader(0, null, this); loader.forceLoad(); } @Override public Loader<Cursor> onCreateLoader(int i, Bundle bundle) { Log.d(TAG, "onCreateLoader()") ; return new FooLoader(getActivity()); } @Override public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) { Log.d(TAG, "onLoadFinished"); } @Override public void onLoaderReset(Loader<Cursor> cursorLoader) { } } 

    Es posible que desee echar un vistazo a CursorJoiner.

    Soy nuevo en ContentLoaders, pero aún no he visto una manera en la que podría utilizar un ContentLoader para manejar varios ContentProviders.

    ¿Son las tablas que está consultando en bases de datos separadas? No está claro de su pregunta. Si las tablas están todas en la misma base de datos, una alternativa podría ser utilizar en lugar de otro ContentProvider para las tablas separadas. Los datos se pueden unir y devolver a un cursor, lo que significa que podría utilizar un CursorLoader. El método SQLiteQueryBuilder.setTables () tiene información sobre esto:

    http://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html#setTables%28java.lang.String%29

    Y se puede ver en acción aquí:

    http://code.google.com/p/openintents/source/browse/trunk/shoppinglist/ShoppingList/src/org/openintents/shopping/provider/ShoppingProvider.java

    Esto también podría ser útil: https://stackoverflow.com/a/3196484/399105

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