Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 带有fragmentstatepageradapter的Viewpager不会对以前的片段调用oncreateview_Android_Android Viewpager_Fragmentstatepageradapter - Fatal编程技术网

Android 带有fragmentstatepageradapter的Viewpager不会对以前的片段调用oncreateview

Android 带有fragmentstatepageradapter的Viewpager不会对以前的片段调用oncreateview,android,android-viewpager,fragmentstatepageradapter,Android,Android Viewpager,Fragmentstatepageradapter,我的viewpager设置为offscreenpagelimit 1(默认值) 当我向右滚动我的viewpager时,oncreateview在当前位置为+1的片段上被调用,以准备下一个片段 但是当我滑动到第三个片段并返回到第二个片段时,第一个片段的oncreateview没有被调用 为什么viewpager的行为是这样的?我如何预加载以前的片段 如果它们已从内存中删除?viewPager的行为如下,因为fragmentStatePagerAdapter正在保存其视图。在第一次运行时,您总会看到

我的viewpager设置为offscreenpagelimit 1(默认值)

当我向右滚动我的viewpager时,oncreateview在当前位置为+1的片段上被调用,以准备下一个片段

但是当我滑动到第三个片段并返回到第二个片段时,第一个片段的oncreateview没有被调用

为什么viewpager的行为是这样的?我如何预加载以前的片段
如果它们已从内存中删除?

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]: