v4.app.Fragment 究竟是如何工作的?我有带有 7 个 fragment 的 viewPager。我确信在 fragment 之间移动时,每个 fragment 都可以根据情况自动销毁和创建。然而,这似乎不是真的。
我决定尝试调试并为我的 Fragment 类对象设置一些标志,比如
class MyClass extends Fragment {
public boolean myFlag=false;
当我设置 ex.在只运行一次的代码中的某处为 true(例如,在单击按钮后设置为 true),在应用程序结束之前,该值似乎为 true。因此,这表明该对象一直保存在内存中。
然而,当用户在 fragment 之间移动时,似乎调用了 onCreateView
和 onViewStateRestored
方法。
现在我感到很困惑。如果 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()
。
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/