我继续努力让查询与 ListFragment 中的 CursorLoader 一起工作。我怀疑我的部分问题是我不确定某些细节。我有一个 xml 文件 myfragment.xml,它定义了我的应用程序中的两个片段。第一个片段,我的 ListFragment,由以下内容标识:
android:id="@+id/frag_mylist"
当我在 ListFragment 类中调用 SimpleCursorAdapter 时,我相信我应该这样做:
String[] dataColumns = { "fieldname", "_id" };
int[] viewIDs = { R.id.frag_mylist };
mAdapter = new SimpleCursorAdapter(getActivity(), R.layout.myfragment, null, dataColumns, viewIDs, 0);
setListAdapter(mAdapter);
getLoaderManager().initLoader(0, info, (LoaderCallbacks<Cursor>) this);
其中 info 是我从以前的活动中传递的 Bundle。那正确吗?此外,我还看到了一些示例,其中 0 作为 SimpleCursorAdapter 的最后一个参数,其他示例使用 CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER。有什么不同?最后,此页面 可能表明我必须在我的代码中检索 LoaderManager,如下所示:
private LoaderManager mLoaderManager;
public void onCreate(savedInstanceState) {
super.onCreate(savedInstanceState);
mLoaderManager = this.getSupportLoaderManager();
}
但这是我见过的唯一地方。这是必要的吗?我希望获得这些问题的答案将帮助我深入了解为什么我的查询没有返回任何结果。我相当有信心此时正在创建和填充我的数据库。非常感谢!
按照下面的要求,这里是我的 LoaderManager.LoaderCallbacks 接口的三个方法:
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String selection = "level='" + args.getString("Level") + "'";
return (Loader<Cursor>) new CursorLoader(getActivity(), MY_URI,
PROJECTION, selection, null, null);
}
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
switch (loader.getId()) {
case LOADER_ID:
mAdapter.swapCursor((android.database.Cursor) cursor);
break;
}
}
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
让我补充一下,我已经通过调试器验证了 onCreateLoader 方法中的 args.GetString("Level") 是“Beginning”,它应该是。