我尝试创建的应用是ViewPager
,然后由Fragments
组成。
每个Fragment
都有不同的数据,因为它来自Database
。
我将数据库类从Fragment Activity
发送到Fragment
内的FragmentStatePagerAdapter
。
以下是代码:
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return PageFragment.create(position, student, getApplicationContext(), mDbStudent);
}
@Override
public int getCount() {
return NUM_PAGES;
}
}
mDbStudent 是数据库类。
我在onCreate
我在onDestroy
我遇到的问题是当方向发生变化时,mDbStudent
被破坏了
但是fragment
仍然从数据库加载数据,因此发生错误。
我尝试在Fragment
onAttach
时使用mDbStudent,但当我快速移动页面时,日志声明我没有关闭 mDbStudent < / p>
我的问题是当方向发生变化时,有没有办法处理 mDbStudent ?
答案 0 :(得分:0)
您需要在Activity之外实例化数据库。最有可能的是,你将在许多活动和片段中使用数据库,对吧?您可以创建一个静态单例,如下所示:
public class Global {
private static Global instance = null;
private Context context;
public Global( Context context ) {
this.context = context.getApplicationContext();
}
public static getInstance( Context context ) {
if( instance == null )
instance = new Global( context );
return instance;
}
public SQLiteOpenHelper getDatabase() {
return ... ;
}
}
然后,在您的活动中,您可以致电:
Global.getInstance( this ).getDatabase()...
这将存储应用程序的Context,因此您可以在需要的时候在Global实例中访问它...即使Activity已被销毁。
这也允许您打开数据库一次并保持打开状态,即使通过方向更改也是如此。在我的应用程序中,我通常会将数据库保持打开状态,直到应用程序显式关闭如果您有单活动应用,我会在onStart
中打开数据库(如果已关闭),并在onUserLeaveHint()
中将其关闭。这只会在用户离开应用程序时关闭数据库,但不会在方向更改时关闭。