问题描述
- 旋转手机屏幕时ViewPager显示的问题
- 程序代码片段中ViewPager视图里含有WebViews。当我旋转手机时,ViewPager总显示第一个页面。这是因为活动和片段又被重新创建。如何保存ViewPager的状态不让活动和片段重新创建呢?下面的代码不能正常执行。
@Overridepublic void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (savedInstanceState != null) { int pos = savedInstanceState.getInt(""currentPosition""); this.setSelectedItem(pos); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(""currentPosition"" positionOfSelectedIndex); }
解决方案
如果改变了系统屏幕的设置方向
会触发onConfigurationChanged事件
重写,将当前状态在其内进行处理
解决方案二:
它是关于如何创建你的FragmentActivity(主机活动)。似乎不能保存viewpager的状态但你可以保存viewpager'适配器中fragments的状态。你也可以同样的方式保存一些内部数据片段。同样如果你不想适配器自动摧毁视图 (当你刷新viewpager)重写适配器的摧毁方法。
解决方案三:
在片段的构造函数中添加:
setRetainInstance(true);
如果你有很多构造函数,要确保这些是无参的构造函数,每个其它的构造函数都调用
this();
然后在 FragmentActivity中实例化 PageAdapter,加入以下代码:
myPager = (ViewPager)findViewById(R.id.pager);myAdapter = new MyPagerAdapter(anyParamsYouMightHave);myPager.setAdapter(myAdapter);myPageAdpater.setCurrentItem(indexOfSomePointYouWishToReturnTo);
时间: 2025-01-31 05:58:31