v4.app.Fragment究竟是如何运作的?我有7个片段的viewPager。我确信在片段之间移动时,根据情况,每个片段都可以自动销毁和创建。但似乎并非如此。
我决定调试一下,为Fragment类对象设置一些标志,比如
class MyClass extends Fragment {
public boolean myFlag=false;
当我设置前。在代码中的某个地方只运行一次(例如,在按钮点击后设置为true),似乎该值在应用程序结束前为真。因此,它表明对象始终保留在内存中。
然而,当用户在片段onCreateView
和onViewStateRestored
之间移动时,似乎会调用方法。
现在我感到很困惑。如果片段没有被销毁,为什么这些方法是由Android执行的?
我是否保证我的Fragment对象将始终保留所有字段(当用户只在Fragments之间移动并且不离开应用程序时)?
如果不是我应该如何保存和恢复其状态? public void onSaveInstanceState(Bundle savedInstanceState)
方法似乎只在用户离开应用程序时运行,而不是在用户在Fragments之间移动时运行。
您是否看过任何有关ViewPager和Fragments的好教程?
答案 0 :(得分:3)
现在我感到很困惑。如果碎片没有被破坏,为什么呢 那些方法是由Android执行的吗?
如果查看此图表,则无需销毁Fragments
即可致电onCreateView()
。
我是否保证我的Fragment对象将始终保留 包含所有字段(当用户仅在片段之间移动而不移动时) 离开应用程序)?
这取决于你在做什么。如果您的案例涉及ViewPager
,那么它实际上归结为您使用的PagerAdapter
和ViewPager
配置。
如果不是我应该如何保存和恢复其状态?公共无效 onSaveInstanceState(Bundle savedInstanceState)方法似乎只是 当用户离开应用程序时运行,而不是当用户在碎片之间移动时运行。
这取决于您希望恢复状态的条件。例如,对于方向更改,您可以在setRetainInstance(true)
上调用Fragment
,并且如果配置发生更改,则会保留Fragment's
状态,因为您的Fragment
不在后台上
您是否看过任何有关ViewPager和Fragments的好教程?
Android Guide有一个很好的教程。
答案 1 :(得分:1)
您可以在其onCreate(...)
方法中重新初始化特定片段的所有值。因此,当它导航到时,它将具有您在onCreate(...)
方法中设置的默认值。
以下是与ViewPager中片段实现相关的一些有用链接:
1. http://thepseudocoder.wordpress.com/2011/10/13/android-tabs-viewpager-swipe-able-tabs-ftw/
2. http://androidtrainningcenter.blogspot.co.il/2012/10/viewpager-example-in-android.html
3. http://manishkpr.webheavens.com/android-viewpager-example/
4. http://thepseudocoder.wordpress.com/2011/10/05/android-page-swiping-using-viewpager/
我希望这会有所帮助。