多个ContentProviders的CursorLoader

Jer*_*rds 11 database android listadapter android-contentprovider android-cursorloader

我需要创建一个ListAdapter来呈现来自多个ContentProviders的数据.ContentProviders本身代表一个来自关系数据库的表.

我想使用CursorLoader系统将聚合数据检索到ListView中.这可能与1个装载机有关,还是需要使用多个装载机?我宁愿用一个.

我不确定除了在代码中手动连接之外我怎么能让2个ContentProviders互相交互,这似乎也不是一个很好的选择.

rOr*_*lig 12

您必须编写Custom Loader类.例如:

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; 
    }
}
Run Code Online (Sandbox Code Playgroud)

在调用活动或片段onCreate()方法中,您需要调用自定义加载器类:

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) {   
    }
}
Run Code Online (Sandbox Code Playgroud)