3

我尝试创建的应用程序是ViewPagerFragments.

每个Fragment都有不同的数据,因为从Database.

我将 Database类Fragment Activity从.FragmentFragmentStatePagerAdapter

这是代码:

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仍然从数据库加载数据,因此发生错误。

我尝试在 when 中获取 mDbStudent FragmentonAttach但是当我非常快速地移动页面时,它记录说我没有关闭mDbStudent

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

4

1 回答 1

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

这存储了应用程序的上下文,因此您可以在需要时在全局实例中访问它......即使 Activity 已经被销毁。

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

于 2013-03-16T02:04:00.557 回答