restartLoader
每次您想要新数据或想要更改光标的参数时调用。
如果您使用initLoader
加载数据
lm = fragment.getLoaderManager();
lm.initLoader(LOADER_ID_LIST, null, this);
每次调用都initLoader
将返回相同的光标到onLoadFinished
. 该onCreateLoader
方法只会在第一次调用 initLoader 时被调用。因此,您无法更改查询。您获得相同的游标相同的数据的onLoadFinished
方法。
@Override
public void onLoadFinished(
android.support.v4.content.Loader<Cursor> loader, Cursor cursor) {
switch (loader.getId()) {
case LOADER_ID_LIST:
// The asynchronous load is complete and the data
// load a list of
populateFromCursor(cursor);
break;
case LOADER_ID_ENTRY:
populateFromCursor(cursor);
break;
}
// The listview now displays the queried data.
}
因此,要onLoadFinished
使用新的游标数据restartLoader
,您可以根据需要传入捆绑信息。下面我传递 null 因为有一个全局变量可用。
lm = fragment.getLoaderManager();
lm.restartLoader(LOADER_ID_LIST, null, this);
loaderManager 然后将调用onCreateLoaderMethod
.
@Override
public android.support.v4.content.Loader<Cursor> onCreateLoader(int id,
Bundle args) {
android.support.v4.content.Loader<Cursor> ret = null;
// Create a new CursorLoader with the following query parameters.
switch (id) {
// load the entire list
case LOADER_ID_LIST:
String sortOrder = null;
switch (mSortOrder) {
case 0:
sortOrder = RidesDatabaseHandler.KEY_DATE_UPDATE + " desc";
break;
case 1:
sortOrder = RidesDatabaseHandler.KEY_ID + " desc";
break;
case 2:
sortOrder = RidesDatabaseHandler.KEY_NAME;
}
return new CursorLoader(context, RidesDatabaseProvider.CONTENT_URI,
PROJECTION, null, null, sortOrder);
// load a single item
case LOADER_ID_ENTRY:
sortOrder = null;
String where = RidesDatabaseHandler.KEY_ID + "=?";
String[] whereArgs = new String[] { Integer.toString(lastshownitem) };
return new CursorLoader(context, RidesDatabaseProvider.CONTENT_URI,
PROJECTION, where, whereArgs, null);
}
return ret;
}
注意:您不必每次initLoader
都调用,除非您真的想要从先前查询返回的相同数据。restartLoader
您不必打电话onContentChanged()
,并且在文档中说这Loader.ForceLoadContentObserver
是为您完成的。