下面列出了怎么用android.support.v4.content.Loader的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public void onLoadFinished(Loader<String> loader, String data) {
/* When we finish loading, we want to hide the loading indicator from the user. */
mLoadingIndicator.setVisibility(View.INVISIBLE);
/*
* If the results are null, we assume an error has occurred. There are much more robust
* methods for checking errors, but we wanted to keep this particular example simple.
*/
if (null == data) {
showErrorMessage();
} else {
mSearchResultsTextView.setText(data);
showJsonDataView();
}
}
@Override
public void onLoadFinished(final Loader<Cursor> cursorLoader, final Cursor cursor) {
if (cursorLoader.getId() != ClassifyFragment.LOADER_ID_NEXT_ID) {
return;
}
mCursor = cursor;
mGetNextInProgress = false;
updateFromCursor();
// Avoid this being called twice, which seems to be an Android bug,
// and which could cause us to get a different item ID if our virtual "next" item changes to
// another item:
// See http://stackoverflow.com/questions/14719814/onloadfinished-called-twice
// and https://code.google.com/p/android/issues/detail?id=63179
getLoaderManager().destroyLoader(ClassifyFragment.LOADER_ID_NEXT_ID);
}
@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
switch (cursorLoader.getId()) {
case ORDER_LOADER:
mOrderSelected = null;
if (cursor.moveToFirst()) {
do {
String json = cursor.getString(COLUMN_ORDER_COLUMN_JSON);
if(json!=null){
mOrderSelected = mGson.fromJson(json, Order.class);
}
} while (cursor.moveToNext());
fillView();
}
break;
default:
break;
}
}
@Override
public void onLoadFinished(@NonNull Loader<Cursor> loader, Cursor cursor) {
if (loader.getId() != LOADER_ID) {
return;
}
whatsNewAdapter.setAppsCursor(cursor);
if (whatsNewAdapter.getItemCount() == 0) {
emptyState.setVisibility(View.VISIBLE);
appList.setVisibility(View.GONE);
explainEmptyStateToUser();
} else {
emptyState.setVisibility(View.GONE);
appList.setVisibility(View.VISIBLE);
}
}
@Override
public void onLoadFinished(Loader<List<File>> loader, List<File> manPageFiles) {
if(mLocalPageList.getHeaderViewsCount() > 0) {
mLocalPageList.removeHeaderView(mLocalPageList.getChildAt(0));
mLocalPageList.removeHeaderView(mLocalPageList.getChildAt(1));
}
mLocalPageList.setAdapter(null); // for android < kitkat for header to work properly
if(manPageFiles.isEmpty()) {
mSearchLocalPage.setVisibility(View.GONE);
View header1 = View.inflate(getActivity(), R.layout.add_folder_header, null);
View header2 = View.inflate(getActivity(), R.layout.load_archive_header, null);
mLocalPageList.addHeaderView(header1);
mLocalPageList.addHeaderView(header2);
} else {
mSearchLocalPage.setVisibility(View.VISIBLE);
}
mLocalPageList.setAdapter(new LocalArchiveArrayAdapter(getActivity(), R.layout.chapter_command_list_item, R.id.command_name_label, manPageFiles));
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(getActivity(), SipProfile.ACCOUNT_URI, new String[] {
SipProfile.FIELD_ID + " AS " + BaseColumns._ID,
SipProfile.FIELD_ID,
SipProfile.FIELD_DISPLAY_NAME,
SipProfile.FIELD_WIZARD,
SipProfile.FIELD_ACTIVE
}, null, null, null);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
MyLog.entry();
final String selection = CapturedPlayerFriendLeaderDescriptor.Fields.PLAYER_ID.getColName() + "=" + mModel.getId();
final Loader<Cursor> loader = new CursorLoader(getActivity(), CapturedPlayerFriendLeaderDescriptor.UriHelper.uriForAllWithInfo(),
null, selection, null, CapturedPlayerFriendLeaderDescriptor.TABLE_NAME + "." + CapturedPlayerFriendLeaderDescriptor.Fields.LAST_SEEN.getColName());
MyLog.exit();
return loader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
data.moveToFirst();
TextView nameTv = (TextView) findViewById(R.id.name_tv);
nameTv.setText(data.getString(data.getColumnIndex("name")));
TextView idTv = (TextView) findViewById(R.id.id_tv);
idTv.setText(data.getLong(data.getColumnIndex("_id")) + "");
}
@Override
public void onLoadFinished(Loader<List<File>> loader, List<File> data) {
mAdapter.setListItems(data);
if (isResumed())
setListShown(true);
else
setListShownNoAnimation(true);
}
@Override
public void onLoadFinished(Loader<AsyncTaskLoaderResult<UserListBean>> loader,
AsyncTaskLoaderResult<UserListBean> result) {
UserListBean data = result != null ? result.data : null;
WeiboException exception = result != null ? result.exception : null;
switch (loader.getId()) {
case NEW_USER_LOADER_ID:
mSwipeRefreshLayout.setRefreshing(false);
refreshLayout(getList());
if (Utility.isAllNotNull(exception)) {
Toast.makeText(getActivity(), exception.getError(), Toast.LENGTH_SHORT).show();
} else {
if (data != null && data.getUsers().size() > 0) {
clearAndReplaceValue(data);
getAdapter().notifyDataSetChanged();
getListView().setSelectionAfterHeaderView();
newUserLoaderSuccessCallback();
}
}
break;
case OLD_USER_LOADER_ID:
refreshLayout(getList());
if (exception != null) {
showErrorFooterView();
} else if (data != null) {
canLoadOldData = data.getUsers().size() > 1;
oldUserLoaderSuccessCallback(data);
getAdapter().notifyDataSetChanged();
dismissFooterView();
} else {
canLoadOldData = false;
dismissFooterView();
}
break;
}
getLoaderManager().destroyLoader(loader.getId());
}
protected Loader<AsyncTaskLoaderResult<CommentListBean>> onCreateOldMsgLoader(int id, Bundle args) {
String accountId = accountBean.getUid();
String maxId = null;
if (getDataList().getItemList().size() > 0) {
maxId = getDataList().getItemList().get(getDataList().getItemList().size() - 1).getId();
}
return new MentionsCommentMsgLoader(getActivity(), accountId, token, null, maxId);
}
/**
* Called by the {@link android.support.v4.app.LoaderManagerImpl} when a new Loader needs to be
* created. This Activity only uses one loader, so we don't necessarily NEED to check the
* loaderId, but this is certainly best practice.
*
* @param loaderId The loader ID for which we need to create a loader
* @param bundle Any arguments supplied by the caller
* @return A new Loader instance that is ready to start loading.
*/
@Override
public Loader<Cursor> onCreateLoader(int loaderId, Bundle bundle) {
switch (loaderId) {
case ID_FORECAST_LOADER:
/* URI for all rows of weather data in our weather table */
Uri forecastQueryUri = WeatherContract.WeatherEntry.CONTENT_URI;
/* Sort order: Ascending by date */
String sortOrder = WeatherContract.WeatherEntry.COLUMN_DATE + " ASC";
/*
* A SELECTION in SQL declares which rows you'd like to return. In our case, we
* want all weather data from today onwards that is stored in our weather table.
* We created a handy method to do that in our WeatherEntry class.
*/
String selection = WeatherContract.WeatherEntry.getSqlSelectForTodayOnwards();
return new CursorLoader(this,
forecastQueryUri,
MAIN_FORECAST_PROJECTION,
selection,
null,
sortOrder);
default:
throw new RuntimeException("Loader Not Implemented: " + loaderId);
}
}
private LoaderInfo createLoader(int id, Bundle args,
LoaderManager.LoaderCallbacks<Object> callback) {
LoaderInfo info = new LoaderInfo(id, args, (LoaderManager.LoaderCallbacks<Object>)callback);
Loader<Object> loader = callback.onCreateLoader(id, args);
info.mLoader = (Loader<Object>)loader;
return info;
}
/**
* Called by the {@link android.support.v4.app.LoaderManagerImpl} when a new Loader needs to be
* created. This Activity only uses one loader, so we don't necessarily NEED to check the
* loaderId, but this is certainly best practice.
*
* @param loaderId The loader ID for which we need to create a loader
* @param bundle Any arguments supplied by the caller
* @return A new Loader instance that is ready to start loading.
*/
@Override
public Loader<Cursor> onCreateLoader(int loaderId, Bundle bundle) {
switch (loaderId) {
case ID_FORECAST_LOADER:
/* URI for all rows of weather data in our weather table */
Uri forecastQueryUri = WeatherContract.WeatherEntry.CONTENT_URI;
/* Sort order: Ascending by date */
String sortOrder = WeatherContract.WeatherEntry.COLUMN_DATE + " ASC";
/*
* A SELECTION in SQL declares which rows you'd like to return. In our case, we
* want all weather data from today onwards that is stored in our weather table.
* We created a handy method to do that in our WeatherEntry class.
*/
String selection = WeatherContract.WeatherEntry.getSqlSelectForTodayOnwards();
return new CursorLoader(this,
forecastQueryUri,
MAIN_FORECAST_PROJECTION,
selection,
null,
sortOrder);
default:
throw new RuntimeException("Loader Not Implemented: " + loaderId);
}
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
Context context = mContext.get();
if (context == null) {
return;
}
mCallbacks.onAlbumLoad(data);
}
protected Loader<AsyncTaskLoaderResult<CommentListBean>> onCreateNewMsgLoader(int id, Bundle args) {
String accountId = accountBean.getUid();
String sinceId = null;
if (getDataList().getItemList().size() > 0) {
sinceId = getDataList().getItemList().get(0).getId();
}
return new CommentsToMeMsgLoader(getActivity(), accountId, token, sinceId, null);
}
@Override
public void onLoadFinished(Loader<MentionTimeLineData> loader, MentionTimeLineData result) {
getListView().setVisibility(View.VISIBLE);
if (result != null) {
getDataList().replaceData(result.msgList);
timeLinePosition = result.position;
}
getAdapter().notifyDataSetChanged();
setListViewPositionFromPositionsCache();
/**
* when this account first open app,if he don't have any data in database,fetch data
* from server automally
*/
if (bean.getSize() == 0) {
// mPullToRefreshListView.setRefreshing();
getSwipeRefreshLayout().setRefreshing(true);
loadNewMsg();
} else {
new RefreshReCmtCountTask(token).executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR);
}
getLoaderManager().destroyLoader(loader.getId());
checkUnreadInfo();
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
Log.d(TAG, "onCreateLoader");
String[] customProjection = new String[]{
"COUNT ("
+ RecordDbContract.RecordItem.COLUMN_NUMBER
+ ") AS " + RecordDbContract.Extended.COLUMN_TOTAL_CALLS,
"SUM (CASE WHEN "
+ RecordDbContract.RecordItem.COLUMN_IS_INCOMING
+ " = 1 THEN 1 ELSE 0 END) AS "
+ RecordDbContract.Extended.COLUMN_TOTAL_INCOMING_CALLS,
"SUM (CASE WHEN "
+ RecordDbContract.RecordItem.COLUMN_IS_INCOMING
+ " = 0 THEN 1 ELSE 0 END) AS "
+ RecordDbContract.Extended.COLUMN_TOTAL_OUTGOING_CALLS};
String[] projection = ArrayUtils.addAll(RecordDbContract.RecordItem.ALL_COLUMNS, customProjection);
String selection = null;
String[] selectionArgs = null;
String sort = "COUNT ( " + RecordDbContract.RecordItem.COLUMN_NUMBER + ") DESC";
switch (id) {
case 0:
// TODO: 17.05.2017 offset and limit control
Uri uri = RecordDbContract.CONTENT_URL
.buildUpon()
.appendQueryParameter(RecordsContentProvider.QUERY_PARAMETER_LIMIT,
String.valueOf(15))
.appendQueryParameter(RecordsContentProvider.QUERY_PARAMETER_OFFSET,
String.valueOf(0))
.appendQueryParameter(RecordsContentProvider.QUERY_PARAMETER_GROUP_BY,
RecordDbContract.RecordItem.COLUMN_NUMBER)
//.encodedQuery("mLimit=" + mLimit + "," + mOffset)
.build();
return new CursorLoader(this, uri, projection, selection, selectionArgs, sort);
default:
throw new IllegalArgumentException("no loader id handled!");
}
}
@Override
public void onLoadFinished(Loader<List<Champion>> loader, final List<Champion> data) {
if (data.size() == 0) {
mRecyclerView.setVisibility(View.INVISIBLE);
mEmptyView.setVisibility(View.VISIBLE);
} else {
mRecyclerView.setVisibility(View.VISIBLE);
mEmptyView.setVisibility(View.INVISIBLE);
}
mAdapter.setData(data);
mAdapter.notifyDataSetChanged();
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
if (!mProgressBar.isShown()) {
mProgressBar.setVisibility(View.VISIBLE);
}
String[] projection = args.getStringArray(RecordsActivity.args.projection.name());
String selection = args.getString(RecordsActivity.args.selection.name());
String[] selectionArgs = args.getStringArray(RecordsActivity.args.selectionArguments.name());
String sort = mPreferenceHelper.getSortSelection()
+ mPreferenceHelper.getSortArrange();
int limit = args.getInt(RecordsActivity.args.limit.name());
int offset = args.getInt(RecordsActivity.args.offset.name());
switch (id) {
case 0:
Uri uri = RecordDbContract.CONTENT_URL
.buildUpon()
.appendQueryParameter(RecordsContentProvider.QUERY_PARAMETER_LIMIT,
String.valueOf(limit))
.appendQueryParameter(RecordsContentProvider.QUERY_PARAMETER_OFFSET,
String.valueOf(offset))
.build();
return new CursorLoader(this, uri, projection, selection, selectionArgs, sort);
default:
throw new IllegalArgumentException("no loader id handled!");
}
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
// Create an adapter to point at this cursor
ItemHuntingRewardListCursorAdapter adapter = new ItemHuntingRewardListCursorAdapter(
getActivity(), (HuntingRewardCursor) cursor);
setListAdapter(adapter);
}
private boolean isStreamLoading() {
if (isAdded()) {
final Loader loader = getLoaderManager().getLoader(TOPICS_LOADER_ID);
if (loader != null) {
return ((LatestTopicsLoader) loader).isLoading();
}
}
return true;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
Context context = mContext.get();
if (context == null) {
return;
}
mCallbacks.onAlbumMediaLoad(data);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
// Check for database errors
if (data == null) {
return;
}
mMediaIdIndex = data.getColumnIndexOrThrow(BaseColumns._ID);
mTitleIndex = data.getColumnIndexOrThrow(MediaColumns.TITLE);
mArtistIndex = data.getColumnIndexOrThrow(AudioColumns.ARTIST);
mAlbumIndex = data.getColumnIndexOrThrow(AudioColumns.ALBUM);
mAlbumIdIndex = data.getColumnIndexOrThrow(AudioColumns.ALBUM_ID);
mQuickQueueAdapter.changeCursor(data);
mCursor = data;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
// Create an adapter to point at this cursor
QuestRewardListCursorAdapter adapter = new QuestRewardListCursorAdapter(
getActivity(), (QuestRewardCursor) cursor);
setListAdapter(adapter);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
if (loader.getId() != LOADER_ID) {
return;
}
categoryAdapter.setCategories(Collections.<String>emptyList());
}
@Override
public void addConnection(OpenMode service) {
try {
if (cloudHandler.findEntry(service) != null) {
// cloud entry already exists
Toast.makeText(this, getResources().getString(R.string.connection_exists),
Toast.LENGTH_LONG).show();
} else {
Toast.makeText(ExplorerActivity.this, getResources().getString(R.string.please_wait), Toast.LENGTH_LONG).show();
Bundle args = new Bundle();
args.putInt(ARGS_KEY_LOADER, service.ordinal());
// check if we already had done some work on the loader
Loader loader = getSupportLoaderManager().getLoader(REQUEST_CODE_CLOUD_LIST_KEY);
if (loader != null && loader.isStarted()) {
// making sure that loader is not started
getSupportLoaderManager().destroyLoader(REQUEST_CODE_CLOUD_LIST_KEY);
}
getSupportLoaderManager().initLoader(REQUEST_CODE_CLOUD_LIST_KEY, args, this);
}
} catch (CloudPluginException e) {
e.printStackTrace();
Toast.makeText(this, getResources().getString(R.string.cloud_error_plugin),
Toast.LENGTH_LONG).show();
}
}
private boolean streamHasMoreResults() {
if (isAdded()) {
final Loader loader = getLoaderManager().getLoader(TOPICS_LOADER_ID);
if (loader != null) {
return ((LatestTopicsLoader) loader).hasMoreResults();
}
}
return false;
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
switch (loader.getId()) {
case LOADER_EVENTS: {
mAdapter.swapCursor(null);
break;
}
}
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args)
{
// Easy way to limit the query to contacts with phone numbers.
String selection = SELECTION + getAdditionalFilters();
return new CursorLoader(getActivity(), // Context
getUri(), // URI representing the table/resource to be queried
null, // projection - the list of columns to return. Null means "all"
selection, // selection - Which rows to return (condition rows must match)
getSelectionArgs(), // selection args - can be provided separately and subbed into selection.
SORT_BY); // string specifying sort order
}