Bạn sẽ phải viết một lớp Trình tải tùy chỉnh. Ví dụ:
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;
}
}
Trong hoạt động gọi điện thoại hoặc mảnh onCreate()
phương pháp, bạn sẽ cần phải gọi lớp loader tùy chỉnh:
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) {
}
}
Xin lỗi nhưng "nhiều ContentProviders" không giống như "nhiều bảng trong db của ứng dụng của tôi". Trình ContentProviders có thể là từ các ứng dụng khác nhau, trong trường hợp đó giải pháp của bạn không phải là giải pháp. (Necroposting, nhưng có lẽ ai đó có một gợi ý) – Giszmo