我有一个问题:我有一个ViewPager与一些页面,我使用FragmentStatePagerAdapter来处理数据.在纵向我有20页的ViewPager和景观我只有10页的ViewPager.所以在方向改变我创建一个新的适配器与不同的数据.
这里有一点解释为什么:我以纵向显示一幅图像,景观中显示两幅图像,但总是算在内.如果我有10张照片要显示,我有10画像和5景观(总是两个).
但是现在我有一个奇怪的错误:
当我在索引5上的景观并打开设备时,ViewPager的当前页面设置为10.如果我再次将其重新设置为第5页.如果我将ViewPage向下滑动到第10页,则适配器的方法getItem为从来没有打过电话,ViewPage向我显示了一幅肖像画,而不是两幅景观.
怎么会这样呢?适配器或ViewPager中是否有缓存?在活动的onCreate中,一切都是新创建的,适配器以及ViewPager的数据(只有路径的字符串).
所以任何想法如何解决这个真的可怕的“功能”?
这里有一些代码:
的onCreate:
mViewPagerAdapter = new ReaderPageViewAdapter(getSupportFragmentManager(),getBaseContext(),mCurrentDocument.mPages,getResources() .getConfiguration().orientation); mPageReader = (ReaderViewPager) findViewById(R.id.pager); mPageReader.setAdapter(mViewPagerAdapter);
适配器getItem:
public Fragment getItem(final int index) { final PageInfo pageInfo = mPages.get(index); final PageFragment pageFragment = (PageFragment) PageFragment .instantiate(mContext,pageInfo.mClss.getName(),pageInfo.mArgs); return pageFragment; }
如果你需要更多的东西告诉我.谢谢
解决方法
您可以覆盖FragmentActivity onSaveInstanceState(),而不调用方法中的super.onSaveInstanceState().
@Override protected void onSaveInstanceState(final Bundle outState) { // super.onSaveInstanceState(outState); }
不要使用mViewPager.setSaveEnabled(false);
它结束了一个大的记忆力.在每次更改方向后,它将Fragments放入FragmentManager数组中,从不清理它.所以在多次更改方向后,可以达到超过100MB的内存使用.使用onSaveInstanceState方法是一种更好的方式.