Inf*_*0re 11 android caching adapter fragment android-viewpager
我有一点问题:我有一些带有一些Pages的ViewPager,我使用FragmentStatePagerAdapter来处理数据.在肖像中,我有例如20页用于ViewPager,在景观中我只有10页用于ViewPager.因此,在方向更改时,我创建了一个具有不同数据的新适配器.
这里有一个小解释原因:我在肖像中展示一幅图像,在风景中展示两幅图像,但总是全部都在计算中 如果我要显示10张照片,我有10张照片,5张照片(总是两张).
但现在我有一个奇怪的错误:当我在索引5上的Landscape并转动设备时,ViewPager的当前页面设置为10.如果我再将它再次转回我在第5页.如果我现在将ViewPage刷到页面10从不调用适配器的methode getItem,并且ViewPage向我显示一个肖像图片而不是两个用于横向图片.怎么会发生这种情况?适配器或ViewPager中是否有缓存?在Activity的onCreate中,一切都是新创建的,适配器以及ViewPager的数据(只是带路径的字符串).所以任何想法如何解决这个真正可怕的"功能"?
这是一些代码:
的onCreate:
mViewPagerAdapter = new ReaderPageViewAdapter(getSupportFragmentManager(), getBaseContext(), mCurrentDocument.mPages, getResources()
.getConfiguration().orientation);
mPageReader = (ReaderViewPager) findViewById(R.id.pager);
mPageReader.setAdapter(mViewPagerAdapter);
Run Code Online (Sandbox Code Playgroud)
adapter 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;
}
Run Code Online (Sandbox Code Playgroud)
如果你需要更多东西,请告诉我.谢谢
Inf*_*0re 41
您可以覆盖FragmentActivity onSaveInstanceState()而不调用方法中的super.onSaveInstanceState().
@Override
protected void onSaveInstanceState(final Bundle outState) {
// super.onSaveInstanceState(outState);
}
Run Code Online (Sandbox Code Playgroud)
不使用 mViewPager.setSaveEnabled(false);
它结束了一个很大的记忆泄漏.每次更改方向后,它都会将Fragments放入FragmentManager数组中,并且永远不会清除它.因此,多次更改方向后,内存使用量将超过100mb.使用onSaveInstanceState方法是我认为更好的方法.
归档时间: |
|
查看次数: |
16568 次 |
最近记录: |