2013-03-16 44 views
3

我尝试创建的应用程序是ViewPager,然后由Fragments组成。方向更改时处理SQLiteOpenHelper

每个Fragment有不同的数据,因为它从Database得到它。

我在FragmentStatePagerAdapter的内部发送从Fragment ActivityFragment的数据库类。

下面是代码:

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是数据库类。

我打开我的mDbStudentonCreate

而且我闭上mDbStudentonDestroy

我的问题是,当方向的变化,mDbStudent被摧毁 但fragment仍然加载来自数据库的数据,因此发生错误。

我试图让mDbStudent在FragmentonAttach,但是当我移动网页速度非常快,其记录说我没有关闭mDbStudent

我的问题是是否有办法在方向更改时处理mDbStudent

回答

0

您需要在活动外实例化您的数据库。很可能,您将在很多活动和片段中使用数据库,对吧?您可以创建一个静态单,像这样:

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()... 

此存储应用程序的内容,让您可以在需要等。无论访问,在全局实例...即使该活动已被销毁。

这也将允许您打开数据库一次并保持打开状态,即使通过方向更改。在我的应用程序中,我通常将数据库保持打开状态,直到应用程序明确关闭。如果您有一个单一活动应用程序,我会打开数据库(如果已关闭),请在onStart中打开数据库,然后在onUserLeaveHint()关闭它。这只会关闭数据库,如果使用离开应用程序,但不会改变方向。

+0

感谢您的回答,我认为我对'Context'没有任何问题。我的问题是什么时候关闭并打开'mDbStudent'。你知道如何处理它吗? – Sieryuu 2013-03-16 02:12:02

+0

修正答案。 'onUserLeaveHint()'适用于此。 – 323go 2013-03-16 02:18:39

+0

谢谢,但我打开我的数据库onCreate,当方向改变时它会再次打开。如何解决它?因为如果它打开两次logcat将出现我永远不会关闭数据库 – Sieryuu 2013-03-16 02:23:42