Я использую Android Compatibility Library в своем проекте. Я настроил ListFragment как описано в DevGuide (http://developer.android.com/reference/android/app/Fragment.html), и используя простой CursorLoader Christian made be used without content provider (CursorLoader usage without ContentProvider).
Вопрос в том, где, в моем ListFragment / parent Activity, я должен открыть базу данных, вернуть курсор, создать Adapter и setListAdapter?
Итак, в моем приложении есть TitlesFragment, DetailsFragment, FragmentLayoutActivity, DetailsLayoutActivity.
Является ли лучшей практикой...
открывать базу данных в onActivityCreated
ListFragment и закрывать ее в onDestroy
ListFragment, как в примере кода ниже
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Открываем базу данных
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 onCreateLoader(int id, Bundle args) {
// Теперь создадим и вернем CursorLoader, который позаботится о том.
// созданием курсора для отображаемых данных.
return new MyCursorLoader(getActivity()) {
@Override
public Cursor loadInBackground() {
playersCursor = playersDatabaseHelper.getAllPlayers();
return playersCursor;
}
};
}
@Override
public void onLoadFinished(Loader loader, Cursor cursor) {
// Создаем пустой адаптер, который мы будем использовать для отображения загруженных данных.
playersAdapter = new RowAdapter(getActivity(), playersCursor, R.layout.players_overview_row);
// Выделите адаптер для списка, отображаемого в этом фрагменте.
setListAdapter(playersAdapter);
playersAdapter.swapCursor(cursor);
// Теперь список должен быть показан.
if (isResumed()) {
setListShown(true);
} else {
setListShownNoAnimation(true);
}
}
Я на правильном пути или мне следует переместить некоторые из них куда-нибудь? Спасибо за ваше время!