Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.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 我如何告诉我的自定义碎片PageRadapter停止销毁我的碎片?_Android_Android Fragments_Android Viewpager - Fatal编程技术网

Android 我如何告诉我的自定义碎片PageRadapter停止销毁我的碎片?

Android 我如何告诉我的自定义碎片PageRadapter停止销毁我的碎片?,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我有一个带有FragmentPagerAdapter的ViewPager,我的应用程序以前只使用了两个片段(不同类型),没有问题 不过,我刚刚添加了第三个片段,现在当我远离它们时,我的适配器/viewpager似乎正在破坏我的片段。例如,如果我在第1页,当我接近第3页时,它会被销毁并重新创建。如果我在第3页,第1页也是一样 这在我的应用程序中引起了很多问题。这些碎片根本不是很重,因此我如何才能阻止这种情况发生?我相信您正在寻找 在您的情况下,以下内容应该将您的片段保存在内存中,而不是销毁它们 V

我有一个带有FragmentPagerAdapter的ViewPager,我的应用程序以前只使用了两个片段(不同类型),没有问题

不过,我刚刚添加了第三个片段,现在当我远离它们时,我的适配器/viewpager似乎正在破坏我的片段。例如,如果我在第1页,当我接近第3页时,它会被销毁并重新创建。如果我在第3页,第1页也是一样


这在我的应用程序中引起了很多问题。这些碎片根本不是很重,因此我如何才能阻止这种情况发生?

我相信您正在寻找

在您的情况下,以下内容应该将您的片段保存在内存中,而不是销毁它们

ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
pager.setOffscreenPageLimit(2);

但是,我怀疑您在被销毁时没有正确存储视图状态。您的片段应该正确处理被销毁/重新创建的片段。例如,如果方向发生变化,您的片段也会被销毁并重新创建。如果用户离开您的应用程序,系统稍后需要内存并破坏您的活动,也可能发生这种情况。它应该能够重新打开,并处于与以前相同的状态。如果这确实是你的问题,考虑保存状态。保存的状态将显示给您,您可以在其中初始化片段的状态,使其与已销毁的片段的状态相同。

只需在FragmentpagerAdapter中重写此方法即可

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
       // TODO Auto-generated method stub
       super.destroyItem(ViewGroup container, int position, Object object);
}
删除
super.destroyItem(视图组容器、int位置、对象)


从你的代码看

是破坏片段还是破坏视图?我不确定。我该怎么检查?你刚才说“这造成了很多问题。”如果碎片被销毁,那么它的状态将从内存中擦除,并在重新加载时重置为默认值。如果使用
FragmentPagerAdapter
你的
碎片一旦创建,在刷卡时将永远不会被销毁。只调用onPause和onStop方法。很可能您正在使用FragmentStatePagerAdapter,当然onStop之后也会调用onDestroyView。太棒了!这将是我的临时解决方案,直到我使片段更加独立于网络。onSaveInstanceState()在大多数情况下都不会被调用。例如,您在第1页,移动到第5页:例如,第一个片段经过onDestroyView(),但不是onSaveInstanceState()。至少在我的情况下,只要你不希望你的碎片被销毁(即使碎片PageRadapter不在范围内),这将起作用。这可能有问题,但在某些情况下,这是完美的。对于这些问题情况,您可以随时自己调用
destroyItem(…)
。非常感谢您提供此解决方案:)