java - v4.app.Fragment 什么时候创建和销毁?

标签 java android android-fragments android-viewpager oncreate

v4.app.Fragment 究竟是如何工作的?我有带有 7 个 fragment 的 viewPager。我确信在 fragment 之间移动时,每个 fragment 都可以根据情况自动销毁和创建。然而,这似乎不是真的。

我决定尝试调试并为我的 Fragment 类对象设置一些标志,比如

class MyClass extends Fragment {
public boolean myFlag=false;

当我设置 ex.在只运行一次的代码中的某处为 true(例如,在单击按钮后设置为 true),在应用程序结束之前,该值似乎为 true。因此,这表明该对象一直保存在内存中。

然而,当用户在 fragment 之间移动时,似乎调用了 onCreateViewonViewStateRestored 方法。

现在我感到很困惑。如果 Fragments 没有被销毁,为什么这些方法会被 Android 执行?

我是否可以保证我的 Fragment 对象将始终包含所有字段(当用户仅在 Fragment 之间移动并且不离开应用程序时)?

如果不是,我应该如何保存和恢复它的状态? public void onSaveInstanceState(Bundle savedInstanceState) 方法似乎仅在用户离开应用程序时运行,而不是在用户在 Fragment 之间移动时运行。

你有没有看过关于 ViewPager 和 Fragments 的好教程?

最佳答案

And now I feel quite confused. If Fragments are not destroyed, why those methods are executed by Android?

如果您查看此图,Fragments 无需销毁即可调用 onCreateView()enter image description here

Do I have the guarantee that my Fragment object will be kept always with all fields (when user only moves beteween Fragments and doesn't leave the app)?

这取决于你在做什么。如果您的情况是处理 ViewPager,那实际上归结为您使用的 PagerAdapter 和您的 ViewPager 配置。

If not how should I save and restore its state? public void onSaveInstanceState(Bundle savedInstanceState) method seems to be only run when user left the app, not when user moves between Fragments.

这取决于您希望在什么条件下恢复状态。例如,对于方向更改,您可以在 Fragment 上调用 setRetainInstance(true),当配置发生更改时,Fragment 的状态将被保留鉴于您的 Fragment 不在后台。

Have you seen any good tutorial concerning ViewPager and Fragments?

Android Guide有一个很好的教程。

关于java - v4.app.Fragment 什么时候创建和销毁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21355307/

相关文章:

android - getTargetContext() 和 getContext(在 InstrumentationRegistry 上)有什么区别?

android - 添加 navGraph 属性时,膨胀类 Fragment 时出错

android Lollipop 动画故障

android - 添加数据后如何在 Fragment 类中刷新 Listview?

java - 使用 Java Spring JPA 和 CRUD 更新数据库记录

java - 从 Java 运行进程并观察其内存消耗

java - C++/Java - int(0 - 1023) 到字节数组(仅限两个字节)

java - 如何标记一些必须在生产前删除的代码?

java - 扩展类并实现接口(interface)的通用类

android - 使用 ActionBar 选项卡在 onCreateView 中获取 Google Map Fragment