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.

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.

  • ¿Por qué getCount en el adaptador se llama tantas veces?
  • ViewPager y OnItemClickListener en ListView
  • ListView addHeaderView hace que la posición aumente en uno?
  • Cómo rellenar un listview asincrónicamente?
  • Android: patrón de ViewHolder y diferentes tipos de filas?
  • Vista personalizada falta constructor utilizado por las herramientas para el adaptador
  • Cómo cambiar la posición de un spinner según la posición de otro spinner en dos actividades diferentes
  • Android: diseño de vista personalizada para SectionIndexer e inhabilitación de SectionIndexer sobre la marcha
  • 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.