viewPager 的行为是这样的,因为 fragmentStatePagerAdapter 正在保存它的视图。在第一次运行时,您总是会看到为 n+1 片段调用了 onCreateView()。但是如果你已经刷过所有的 Fragment,它们的视图已经在 FragmentStatePagerAdapter 中了。
当然,由于内存管理的原因,PagerAdapter 可能会破坏一些视图(和 Fragment)。
假设发生这种情况:片段 X 被销毁。
因此,如果您在片段上滑动,并且您在片段 Y 上。片段 X 在您的 offscreenpagelimit 中。
FragmentStatePagerAdapter 将注意到没有可用的片段并将重新创建它。在这种情况下,将再次调用 onCreateView()。
如果你想预加载Fragment被销毁之前的状态,那么你需要使用回调onSaveInstanceState()。
这是一个例子:
保存 Fragment 的状态:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.v(TAG, "In frag's on save instance state ");
outState.putSerializable("starttime", startTime); //saves the object variable
}
恢复状态:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.v(TAG, "In frag's on create view");
View view = inflater.inflate(R.layout.fragment_data_entry, container,
false);
timeTV = (TextView) view.findViewById(R.id.time_tv);
if ((savedInstanceState != null)
&& (savedInstanceState.getSerializable("starttime") != null)) {
startTime = (Calendar) savedInstanceState
.getSerializable("starttime");
}
return view;
}
此代码取自here。您可以在此网站上获得更多信息。