Android:FragmentPagerAdapter不保存Fragment的状态?

我有FragmentPagerAdapter的问题。

我无法保存Fragment的状态,然后在Fragment中有视图。 每当我使用向左和向右滑动时,通过覆盖扩展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数据库有几个步骤,这会导致数据库连接池的饱和。

每当动态更改片段时发现警告:“W / SQLiteConnectionPool(1111):数据库’/ data / data / com.myapp / databases / mydb’的SQLiteConnection对象被泄露!请修复您的应用程序以正确结束正在进行的事务,关闭数据库时不再需要它。“

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

你能告诉我怎么办吗? 我不希望每次都重新生成Fragment,从而导致数据库出现问题。 你有一个保存片段/查看状态的例子吗?

我现在还没有找到任何建议。 非常感谢你

为ViewPager对象使用setOffscreenPageLimit属性。

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

首先,每次调用getItem()时都会创建一个新的Fragment实例

 @Override public Fragment getItem(int position) { switch (position) { case 0: return new FragmentList(); case 1: return new AnalyzeFragmentPage1(); case 2: return new AnalyzeFragmentPage2(); } return null; } 

请注意, FragmentPagerAdapter与普通Adapter不完全相同,这意味着它不使用空容器Fragment ,然后使用不同的数据重新填充它。

相反,它会在需要时创建一个新的Fragment 。 所以你应该在创建Fragment时传递数据(如果有的话)。 请研究Android文档中的示例 。

在实时项目中,您可以传递Fragment应该引用的条目的实际ID ,而不是将当前位置传递给新的Fragment