ListFragment で CursorLoader を使用してクエリを実行するのに引き続き苦労しています。私の問題の一部は、特定の詳細について確信が持てないことにあると思います。アプリ内の 2 つのフラグメントを定義する 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 です。そうですか?また、SimpleCursorAdapter の最後のパラメーターとして 0 を使用する例や、CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER を使用する例もいくつか見てきました。違いは何ですか?最後に、このページ は、次のようにコードで LoaderManager を取得する必要があることを示している場合があります。
private LoaderManager mLoaderManager;
public void onCreate(savedInstanceState) {
super.onCreate(savedInstanceState);
mLoaderManager = this.getSupportLoaderManager();
}
しかし、これは私がこれを見た唯一の場所です。これは必要ですか?これらの質問に対する回答を得ることで、クエリが結果を返さない理由を掘り下げるのに役立つことを願っています。この時点で、データベースが作成され、データが取り込まれていることを確信しています。どうもありがとう!
以下に要求されているように、LoaderManager.LoaderCallbacks インターフェイスの 3 つのメソッドを次に示します。
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」であることをデバッガーで確認したことを付け加えておきます。