プロジェクトで Android 互換性ライブラリを使用しています。DevGuide ( http://developer.android.com/reference/android/app/Fragment.html ) で説明されているように ListFragment をセットアップし、単純な CursorLoader Christian を使用して、コンテンツ プロバイダーなしで使用できるようにしました ( ContentProvider を使用しない CursorLoader の使用)。
問題は、ListFragment / 親アクティビティのどこで、データベースを開き、カーソルを返し、アダプターを作成し、ListAdapter を設定する必要があるかということです。
したがって、私のアプリには、TitlesFragment、DetailsFragment、FragmentLayoutActivity、DetailsLayoutActivity があります。
ベストプラクティスですか...
以下のコードサンプル
onActivityCreated
のように、ListFragment でデータベースを開き、ListFragment でデータベースを閉じます。onDestroy
@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Open database playersDatabaseHelper = new PlayersDBAdapter(getActivity()); playersDatabaseHelper.open(); getLoaderManager().initLoader(0, null, this); ... } @Override public void onDestroy() { super.onDestroy(); if (playersDatabaseHelper != null) { playersDatabaseHelper.close(); } }
以下のサンプル コードのように、データベースにクエリを実行してカーソルを返し、
onCreateLoader
アダプタと setListAdapter を作成します。onLoadFinished
@Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { // Now create and return a CursorLoader that will take care of // creating a Cursor for the data being displayed. return new MyCursorLoader(getActivity()) { @Override public Cursor loadInBackground() { playersCursor = playersDatabaseHelper.getAllPlayers(); return playersCursor; } }; } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { // Create an empty adapter we will use to display the loaded data. playersAdapter = new RowAdapter(getActivity(), playersCursor, R.layout.players_overview_row); // Allocate the adapter to the List displayed within this fragment. setListAdapter(playersAdapter); playersAdapter.swapCursor(cursor); // The list should now be shown. if (isResumed()) { setListShown(true); } else { setListShownNoAnimation(true); } }
私は正しい軌道に乗っていますか、それともそれらのいくつかをどこかに移動する必要がありますか? 御時間ありがとうございます!