我继续努力获取查询以使用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。有什么不同?最后,this page 可能表示我必须在代码中检索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”,这应该是它。
答案 0 :(得分:0)
交换光标后在onLoadFinished中添加此行
mAdapter.notifyDataSetChanged()