【发布时间】:2015-06-23 21:38:04
【问题描述】:
短版:
我有一个具有 ViewPager 的 Activity。 ViewPager 里面有三个片段。我通过实现 Parcelable 并将数据存储在包中来将数据存储在片段中。
现在的问题是我在哪里恢复数据。我很困惑,因为(据我所知)每次旋转屏幕时,ViewPager 都会创建片段的新实例。 (创建了一个新活动 -> 新 ViewPager -> 新片段)。如果我错了,请纠正我。
加长版:
我在 MainActivity 中的 ViewPager
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(new ForecastFragmentPageAdapter(getSupportFragmentManager(),
ForecastActivity.this));
viewPager.setOffscreenPageLimit(2);
我的 FragmentPagerAdapter
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new NowForecastFragment();
} else if (position == 1) {
return new HourlyForecastFragment();
} else {
return new DailyForecastFragment();
}
}
在我的一个片段中保存状态
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// save data source
if (nowDataList != null) {
outState.putParcelableArrayList("savedNowDataList", nowDataList);
}
}
提前致谢!
更新:
根据发布到类似问题的其他解决方案,我还在片段的 onCreateView 中添加了 setRetainInstance(true);。这就是我保存和恢复状态的方式:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// save data source
if (nowDataList != null) {
Log.v("---------------->","saved!");
outState.putParcelableArrayList("savedNowDataList", nowDataList);
}
}
在 onCreateView 中恢复
if(savedInstanceState!=null) {
Log.v("---------------->","restored!");
nowDataList = savedInstanceState.getParcelableArrayList("savedNowDataList");
nowForecastAdapter.notifyDataSetChanged();
}
我看到两个日志都被触发了。为什么数据没有恢复?
【问题讨论】:
-
我想这会对你有所帮助stackoverflow.com/questions/7951730/…
-
虽然解决方案为我清除了很多东西,但我并没有从活动中初始化我的片段。我的 FragmentPageAdapter 正在这样做。所以,我不确定如何在我的活动中保存和恢复我的片段。
-
嗨伙计,只需在清单文件中设置 configchanges = screensize ,它不会重新加载片段并保留当前状态。希望有帮助:)
标签: android android-fragments android-viewpager fragment-lifecycle