我尝试创建的应用程序是 ViewPager
,然后由 Fragments
组成。
每个 Fragment
都有不同的数据,因为它们是从 Database
中获取的。
我将数据库类从 Fragment Activity
发送到 FragmentStatePagerAdapter
内的 Fragment
。
代码如下:
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
上打开我的 mDbStudent
当 onDestroy
我遇到的问题是当方向改变时,mDbStudent
被破坏了
但是 fragment
仍然从数据库中加载数据,因此发生了错误。
我尝试在 onAttach
时获取 Fragment
中的 mDbStudent,但是当我非常快速地移动页面时,它记录说我没有关闭 mDbStudent
我的问题是有没有办法在方向改变时处理mDbStudent?
最佳答案
您需要在 Activity 之外实例化您的数据库。您很可能会在许多 Activies 和 Fragments 中使用数据库,对吗?您可以创建静态单例,如下所示:
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 ... ;
}
}
然后,在您的 Activity 中,您可以调用:
Global.getInstance( this ).getDatabase()...
这会存储应用程序的上下文,因此您可以在任何需要的地方在全局实例中访问它...即使 Activity 已被销毁。
这还允许您打开数据库一次并保持打开状态,即使方向发生变化。在我的应用程序中,我通常让数据库保持打开状态,直到应用程序明确关闭。如果您有一个单 Activity 应用程序,我会在 onStart
中打开数据库(如果已关闭)并在 onUserLeaveHint()
中将其关闭。这只会在用户离开应用程序时关闭数据库,但不会在方向改变时关闭。
关于android - 方向改变时处理 SQLiteOpenHelper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15444714/