返回应用程序时,保留的片段无法正常工作

时间:2014-10-01 18:21:09

标签: android android-fragments

我有一个保留的片段在旋转屏幕时工作正常(在调用父应用程序' onCreate()之后)。

然而,只要我离开应用程序并返回它(例如,通过转到主屏幕然后返回到我的应用程序),片段似乎表现不正确。

基本上发生的事情是,每次我回归'在我的活动中,片段似乎是“重置”#39;某种程度上来说。这可能与碎片事务有关吗?


在最后一次调用Log.d()时,gameFragment.testValue返回null - 这是怎么回事?我设置值的唯一地方是通过早期的条件块。如果没有设置该值,将如何创建片段?

        gameFragment = (GameFragment)fragmentManager.findFragmentByTag("gameFragment");


    if (gameFragment == null)
    {
        gameFragment = new GameFragment();
        gameFragment.setRetainInstance(true);

        gameFragment.testValue = new Random().nextInt(1000);
        Log.d("hmm", " after set test value:" +gameFragment.testValue);

        fragmentManager.beginTransaction().add(gameFragment, "gameFragment").commit();
        fragmentManager.executePendingTransactions();

        gameFragment.testValue = new Random().nextInt(1000);
        Log.d("hmm", " after commit, after set test value:" +gameFragment.testValue);
    }
    else
    {
        Log.d("hmm", "test value:" +gameFragment.testValue);
    }

2 个答案:

答案 0 :(得分:2)

检查documentation您会找到

  

Fragment的所有子类都必须包含一个公共空构造函数。   框架通常会在需要时重新实例化一个片段类,   特别是在状态恢复期间,需要能够找到这个   构造函数来实例化它。如果没有空构造函数   可用时,在某些情况下会在状态期间发生运行时异常   还原

考虑通过setArguments方法和捆绑设置参数 - 这样,当Android重新创建片段时,它就能将参数设置为旧值。

支持论文的东西:http://developer.android.com/reference/android/app/Fragment.html#setArguments(android.os.Bundle)

答案 1 :(得分:1)

  

在最后一次调用Log.d()时,gameFragment.testValue返回null - 这是怎么回事?

一种可能性是您的流程已经终止。 Android将使用零参数公共构造函数重新创建您的片段,它将为您提供savedInstanceState Bundle。但是“保留片段”的“保留”部分仅用于配置更改,因此仅通过该方式保留的任何内容都将丢失。