Android 带有fragmentstatepageradapter的Viewpager不会对以前的片段调用oncreateview
我的viewpager设置为offscreenpagelimit 1(默认值) 当我向右滚动我的viewpager时,oncreateview在当前位置为+1的片段上被调用,以准备下一个片段 但是当我滑动到第三个片段并返回到第二个片段时,第一个片段的oncreateview没有被调用 为什么viewpager的行为是这样的?我如何预加载以前的片段Android 带有fragmentstatepageradapter的Viewpager不会对以前的片段调用oncreateview,android,android-viewpager,fragmentstatepageradapter,Android,Android Viewpager,Fragmentstatepageradapter,我的viewpager设置为offscreenpagelimit 1(默认值) 当我向右滚动我的viewpager时,oncreateview在当前位置为+1的片段上被调用,以准备下一个片段 但是当我滑动到第三个片段并返回到第二个片段时,第一个片段的oncreateview没有被调用 为什么viewpager的行为是这样的?我如何预加载以前的片段 如果它们已从内存中删除?viewPager的行为如下,因为fragmentStatePagerAdapter正在保存其视图。在第一次运行时,您总会看到
如果它们已从内存中删除?viewPager的行为如下,因为fragmentStatePagerAdapter正在保存其视图。在第一次运行时,您总会看到为n+1片段调用onCreateView()。但是如果你浏览了所有的片段,它们的视图已经在FragmentStatePagerAdapter中了。 当然,由于内存管理的原因,PagerAdapter可能会破坏一些视图(和片段) 假设发生这种情况:片段X被销毁。 所以,如果你扫过你的碎片,你在碎片Y上,碎片X在你的屏幕外。 FragmentStatePagerAdapter将注意到没有可用的片段,并将重新创建它。在这种情况下,将再次调用onCreateView() 如果要预加载片段销毁之前的状态,则需要使用回调onSaveInstanceState() 以下是一个例子: 要保存片段的状态,请执行以下操作:
@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;
}
此代码取自。您可以在此网站上获得更多信息。这没有帮助。在第一次加载视图寻呼机时,我仍然没有看到对元素0调用onCreate和onCreateView。请查看我的分析以及我解决问题的方法。我能够解决这个问题,并且我已经回答了:[此处][1][1]: