我在我的项目中使用了Android兼容库。我按照DevGuide(http://developer.android.com/reference/android/app/Fragment.html)中的描述设置了ListFragment,并使用了一个简单的CursorLoader,这个CursorLoader是由Christian编写的,可以不使用内容提供程序 (不使用ContentProvider使用CursorLoader)。
问题是,在我的ListFragment/父Activity中,我应该在哪里打开数据库,返回Cursor,创建适配器并设置ListAdapter呢?
因此,在我的应用程序中,我有TitlesFragment、DetailsFragment、FragmentLayoutActivity和DetailsLayoutActivity。
最好的做法是...
在ListFragment的onActivityCreated中打开数据库,在ListFragment的onDestroy中关闭它,就像下面的代码示例一样。
问题是,在我的ListFragment/父Activity中,我应该在哪里打开数据库,返回Cursor,创建适配器并设置ListAdapter呢?
因此,在我的应用程序中,我有TitlesFragment、DetailsFragment、FragmentLayoutActivity和DetailsLayoutActivity。
最好的做法是...
在ListFragment的onActivityCreated中打开数据库,在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
中查询数据库并返回游标,然后在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);
}
}
我是否在正确的方向上,或者应该将它们中的一些移动到其他地方?感谢您的时间!