onLoadFinished()无返回值时跳转至Activity的实现问询
解决
onLoadFinished()无数据时跳转Activity的问题 嘿,我来帮你搞定这个跳转需求!先看看你现有的onLoadFinished()代码:
@Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { if (cursor != null && cursor.getCount() > 0) { cursor.moveToFirst(); StringBuilder result = new StringBuilder(); while (!cursor.isAfterLast()) { long userIDFromContentProvider = cursor.getLong(cursor.getColumnIndex(userIDColumn)); String userEmailFromContentProvider = cursor.getString(cursor.getColumnIndex(userEmailColumn)); result.append("\n"+ userEmailFromCon... } } }
你只需要在cursor为空或者没有数据的分支里,添加跳转Activity的逻辑就可以了。具体修改后的代码如下:
@Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { if (cursor != null && cursor.getCount() > 0) { // 你原来处理有数据的逻辑,保持不变 cursor.moveToFirst(); StringBuilder result = new StringBuilder(); while (!cursor.isAfterLast()) { long userIDFromContentProvider = cursor.getLong(cursor.getColumnIndex(userIDColumn)); String userEmailFromContentProvider = cursor.getString(cursor.getColumnIndex(userEmailColumn)); result.append("\n" + userEmailFromContentProvider); cursor.moveToNext(); // 别忘了加这行,否则会陷入死循环哦! } // 用完cursor记得关闭,避免内存泄漏 cursor.close(); } else { // 这里就是无数据时的跳转逻辑 Intent intent = new Intent(getContext(), TargetActivity.class); // 如果是在Activity里实现的回调,就用this代替getContext() // Intent intent = new Intent(this, TargetActivity.class); startActivity(intent); // 可选:如果需要关闭当前页面,可调用finish() // finish(); } }
几个关键注意事项:
- 把
TargetActivity.class替换成你实际要跳转的Activity类 - 如果是在Fragment中实现Loader回调,要用
getContext()或getActivity()获取上下文;如果是在Activity中,直接用this即可 - 必须在
AndroidManifest.xml中注册目标Activity,否则会抛出ActivityNotFoundException异常 - 处理完cursor后记得调用
cursor.close(),避免内存泄漏问题
内容的提问来源于stack exchange,提问作者waseefakhtar
相关产品推荐
相关产品推荐

