java - 安卓 : FragmentPagerAdapter don't saved the state of Fragment?

标签 java android android-fragments android-sqlite fragmentpageradapter

我对 FragmentPagerAdapter 有疑问。

我无法保存 Fragment 的状态,然后在 Fragment 中有 View 。每当我使用向左和向右滑动时,都会通过覆盖扩展 FragmentPagerAdapter 的静态类中的方法 getItem(int position) 来重新创建 Fragment。

 public static class GraphicsCollectionPagerAdapter extends FragmentPagerAdapter {

    final int NUM_ITEMS = 3; // number of tabs

    public GraphicsCollectionPagerAdapter(FragmentManager fm) {

        super(fm);
        fragmentList = new AnalyzeFragmentPageListWithDate();
        fragment1 = new  AnalyzeFragmentPage1();
        fragment2 = new  AnalyzeFragmentPage2();
    }

    @Override
    public Fragment getItem(int position) {
        //Log.i(TAG, "getItem() -> New fragment at position " + position);


        switch (position) {

        case 0:         
            return fragmentList;
       case 1:
            return fragment1;
       case 2:
             return fragment2;
        }
        return null;
    }

    @Override
    public int getCount() {
         return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {

        switch (position) {

         case 0:
            return "Fragm1";
        case 1:
            return "Fragm2";
        case 2:
            return "Fragm3";

    }
        return "OBJECT " + (position + 1);
    }


}

在 Fragment 的每个实例的 OnCreateView 方法中,有几个步骤到 SQLite 数据库,这会导致数据库连接池饱和。

每当更改动态 fragment 时发现的警告是:“W/SQLiteConnectionPool (1111):数据库‘/data/data/com.myapp/databases/mydb’的 SQLiteConnection 对象已泄露!请修复您的应用程序以结束事务适本地进行并在不再需要时关闭数据库。”

我已经尝试使用 FragmentStatePagerAdapter 但没有成功。

您能告诉我如何进行吗?我不希望每次都重新生成 Fragment,从而导致数据库出现问题。您有保存 fragment/ View 状态的示例吗?

目前我还没有找到任何建议。 非常感谢

最佳答案

为您的 ViewPager 对象使用 setOffscreenPageLimit 属性。

ViewPager pager = (ViewPager) findViewById(R.id.viewPagerId);
pager.setOffscreenPageLimit(2);

关于java - 安卓 : FragmentPagerAdapter don't saved the state of Fragment?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22709367/

相关文章:

java - 将 Javabean 集合作为数组列表进行迭代?

java - Ormlite - 扩展 BaseDaoImpl 时构造函数调用失败

java - 获取最不重要的字符串

java - 警告 : while trying to convert java byte[] to C unsigned char*

java - 如何自定义 Material 组件的日期范围选择器的颜色和其他内容?

android - 在包含 fragment 的主 Activity 中拉动刷新

php - 更改电话号码和联系人姓名

c# - Xamarin 安卓 C# : Using the xml resource folder and manifest to define an intent filter for detecting connected usb devices crashs application

android - 为什么 FragmentTransaction.hide() 不隐藏我的 fragment ?

android - 来自 Firebase 的数据 - android 回收器 View 重新填充