gpt4 book ai didi

android - ViewPager + FragmentStatePagerAdapter + 方向改变

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:49:53 25 4
gpt4 key购买 nike

我有一个小问题:我有一个带有一些页面的 ViewPager,我使用 FragmentStatePagerAdapter 来处理数据。例如,在纵向 View 中,我有 20 页用于 ViewPager,而在横向 View 中,我只有 10 页用于 ViewPager。因此,在方向改变时,我创建了一个具有不同数据的新适配器。

这里稍微解释一下原因:我展示了一张纵向图像和两张横向图像,但总是全部计算在内。如果我有 10 张图片要显示,我有 10 张纵向图片和 5 张横向图片(总是两张)。

但现在我有一个奇怪的错误:当我在索引 5 的风景中并转动设备时,ViewPager 的当前页面设置为 10。如果我再次将其转回我在第 5 页。如果我现在将 ViewPage 滑动到第 10 页,则适配器的 getItem 方法是从来没有调用我,ViewPage 向我显示了一张纵向图片,而不是两张横向图片。这怎么会发生? adapter 或 ViewPager 中是否有缓存?在 Activity 的 onCreate 中,所有内容都是新创建的,适配器以及 ViewPager 的数据(只是带有路径的字符串)。那么知道如何解决这个非常可怕的“功能”吗?

下面是一些代码:

创建时:

    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);

它以严重的内存泄漏告终。每次更改方向后,它都会将 Fragment 放入 FragmentManager 数组中,并且从不清理它。因此多次更改方向后内存使用量超过 100mb。我认为使用 onSaveInstanceState 方法是更好的方法。

关于android - ViewPager + FragmentStatePagerAdapter + 方向改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13910826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com