android - 方向改变时处理 SQLiteOpenHelper

标签 android android-fragments android-viewpager

我尝试创建的应用程序是 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

我遇到的问题是当方向改变时,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/

相关文章:

android - CoordinatorLayout 内的 ViewPager 内的 RecyclerView 内的 NestedScrollView 不可滚动

android - 按下后退时,返回具有 Fragments 的 RecyclerView 会导致 IllegalArgumentException

android - 如何使用 fragment 制作标签(工厂使用内容)?

java - android 滚动时添加 View

java - LocationClient.getLastLocation() 多久更新一次?

java - Firebase引用始终获取最后一个用户被创建的android studio

android - 单击 Navigation Drawer Fragment 正在单击 Main Content Fragment

android - Activity 结果 fragment 索引超出范围 : 0x20001

android - 如何使用在 fragment 之间设置动画的共享元素过渡

java - SQLite 数据库更新