我在我的项目中使用 Android 兼容性库。我已经按照 DevGuide ( http://developer.android.com/reference/android/app/Fragment.html )中的描述设置了 ListFragment ,并使用了一个简单的 CursorLoader Christian 在没有内容提供者的情况下使用 ( CursorLoader 使用没有 ContentProvider)。
问题是,在我的 ListFragment / parent Activity 中,我应该在哪里打开数据库、返回游标、创建适配器和 setListAdapter?
所以在我的应用程序中,我有 TitlesFragment、DetailsFragment、FragmentLayoutActivity、DetailsLayoutActivity。
是最佳实践吗...
在 ListFragment 中打开数据库并在 ListFragment 中
onActivityCreated
关闭它,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
创建适配器和 setListAdapteronLoadFinished
@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); } }
我在正确的轨道上还是应该将其中的一些移到某个地方?谢谢你的时间!