android – ViewPager FragmentStatePagerAdapter方向更改

前端之家收集整理的这篇文章主要介绍了android – ViewPager FragmentStatePagerAdapter方向更改前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个问题:我有一个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方法是一种更好的方式.

猜你在找的Android相关文章