当前位置: 首页 > 知识库问答 >
问题:

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

慕和惬
2023-03-14

我有一个带有片段页面管理器的视图页面管理器,我的应用程序以前只使用了两个片段(不同类型的)而没有问题。

不过,我刚刚添加了第三个片段,现在当我远离它们时,我的适配器/视图寻呼机似乎正在破坏我的片段。例如,如果我在第1页,当我靠近它时,第3页会被销毁并重新创建。如果我在第3页,第1页也会发生同样的事情。

这会导致我的应用出现很多问题。这些碎片根本不是RAM,所以我如何阻止这种情况发生?

共有2个答案

锺高翰
2023-03-14

只需在FragmentpagerAdapter中重写此方法

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
       // TODO Auto-generated method stub
       super.destroyItem(ViewGroup container, int position, Object object);
}

remove < code > super . destroyitem(view group容器,int位置,Object对象);

从你的代码

彭正谊
2023-03-14

我相信你正在寻找ViewPager.setOffscreenPageLimit()。

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

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

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

 类似资料:
  • 场景: 我有一个使用Gradle构建的应用程序 应用程序使用JavaFX 我想要的 null 将指向所需的JDK 我可以接受很多建议: 定义系统环境变量的解决方案,我可以在build.gradle脚本中签入该变量 在gradle.properties中定义的变量 仅针对构建上下文重写JAVA_HOME变量(类似于) 我没有想过的其他事情 问题: 如何将变量(如何定义,如中的变量、系统环境变量、..

  • 其他地方建议使用PyLucene附带的,但事实证明这不是的实例,不能与一起使用。 如何给一组新的停止词?

  • 问题内容: 我想告诉(或一个 自定义的opener )使用(或)解析地址。但是,我不会更改我的。 一种可能的解决方案是使用一种工具来查询地址并构建自定义网址打开器。我更希望告诉您使用自定义名称服务器。有什么建议? 问题答案: 看起来名称解析最终是由处理的。 尽管设置了“主机:”标头后,您仍可以解析主机并将IP地址向下传递到打开程序。 我建议您子类化,并在将方法传递给之前包装要修改的方法。 然后,将

  • 科学论文的R“stats”引用问题使我想知道,当在学术论文中使用R时,我将如何列举我应该引用的所有R包。我如何获得我加载并需要引用的包列表?

  • 问题内容: 我通过以下方式创建了线程服务: 关闭应用程序后,电话的工作速度非常慢,我猜这是由于线程终止失败引起的。 有谁知道在终止应用程序之前终止所有线程的最佳方法是什么? 问题答案: 附录 :Android框架为一次性工作,后台工作等提供了许多帮助程序,与在许多情况下尝试滚动自己的线程相比,它们可能更可取。如下面的文章所述,AsyncTask是一个很好的起点。我鼓励读者在开始考虑自己编写线程之前

  • 问题内容: 目前,我使用以下代码: 它告诉Keras,如果损失在2个时期内没有改善,就停止训练。但是我要在损失小于某个恒定的“ THR”后停止训练: 我在文档中已经看到有可能进行自己的回调:http : //keras.io/callbacks/ 但没有找到如何停止训练过程的方法。我需要个建议。 问题答案: 我找到了答案。我调查了Keras的资源,并找到了EarlyStopping的代码。我基于此