LoaderCallbacks を持つカスタマイズされた CursorAdpater を含む ListView を実装しています。OnCreatLoader が呼び出されると、DB から theCursor を取得する AsyncTaskLoader を実行しています。カーソルがロードされた後に swapCursor を呼び出すと、遅延があることに気付きました。一度に10個のアイテムをロードするような解決策はありますか?もしそうなら、どこでこれを行うことができますか?
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args)
{
// Create the Cursor that will take care of the data being displayed
Log.d("TAG", "onCreateLoader...");
return new MessageAsyncTaskLoader(getActivity());
}
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor)
{
// Now Bind the data to the View
Log.d("TAG", "onLoadFinished...ARG1= " + cursor);
mCusrorAdapter.swapCursor(cursor);// This is were the delay is...
}
public static class MessageAsyncTaskLoader extends AsyncTaskLoader<Cursor>
{
Cursor cursor;
public MessageAsyncTaskLoader(Context context)
{
super(context);
}
@Override
protected void onStartLoading()
{
super.onStartLoading();
mCusrorAdapter = new CustomCursorAdapter(mContext);
mListView.setAdapter(mCusrorAdapter);
forceLoad();
}
@Override
public Cursor loadInBackground()
{
cursor = mContext.getContentResolver().query(CONTENT_URI, null, null,null,
DataBase.COLUMN_MESSAGE_DATE+ " DESC");
return cursor;
}
@Override
protected void onStopLoading()
{
super.onStopLoading();
cursor.close();
}
}