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

时间:2014-01-25 19:38:14

标签: java android android-fragments android-viewpager oncreate

v4.app.Fragment究竟是如何运作的?我有7个片段的viewPager。我确信在片段之间移动时,根据情况,每个片段都可以自动销毁和创建。但似乎并非如此。

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

class MyClass extends Fragment {
public boolean myFlag=false;

当我设置前。在代码中的某个地方只运行一次(例如,在按钮点击后设置为true),似乎该值在应用程序结束前为真。因此,它表明对象始终保留在内存中。

然而,当用户在片段onCreateViewonViewStateRestored之间移动时,似乎会调用方法。

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

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

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

您是否看过任何有关ViewPager和Fragments的好教程?

2 个答案:

答案 0 :(得分:3)

  

现在我感到很困惑。如果碎片没有被破坏,为什么呢   那些方法是由Android执行的吗?

如果查看此图表,则无需销毁Fragments即可致电onCreateView()enter image description here

  

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

这取决于你在做什么。如果您的案例涉及ViewPager,那么它实际上归结为您使用的PagerAdapterViewPager配置。

  

如果不是我应该如何保存和恢复其状态?公共无效   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/

我希望这会有所帮助。