setretaininstance(true)不使用无头片段保留其类成员

时间:2015-07-21 08:50:42

标签: android android-fragments

Android Studio 1.3 RC 3

您好,

我试图通过重复改变来保留无头片段RetainedFragment.java的状态。

设备旋转正常。但是,我的MainFragment.javastartActivityResult(...)中存在问题,因为隐式活动(打开gallary app)可以查看照片。

RetainedFragment.java不保留其类成员,即使我在RetainedFragment.java的onCreate()中有setRetainInstance(true)。

我还尝试使用onSavedInstanceState将mDataInt保存到一个包中,然后从onActivityCreated方法中检索它。

RetainedFragment.javaheadless fragment,因此不包含任何用户界面,仅用于保存和恢复状态。

我无法理解的是,旋转变化可以正常工作。它只有当我开始一个新的隐式活动来启动gallary应用程序时。

我正在测试它的类成员称为mDataInt,并且在实例化类时将其初始值设置为101。然后到onSavedInstanceState中的2015,以在重新创建RetainedFragment时保留该值。 非常感谢任何建议,

public static class RetainedFragment extends Fragment {
    private static final String TAG = RetainedFragment.class.getSimpleName();

    private Integer mDataInt = 101;

   public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /* Ensure the data survives runtime configuration changes */
        setRetainInstance(true);

        if(savedInstanceState == null) {
            Log.d(TAG, "onCreate savedInstanceState == null - dataInt: " + mDataInt);
         }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        mDataInt = 2015;
        Log.d(TAG, "onSavedInstanceState mDataInt: " + mDataInt);
        outState.putInt("DATAINT_KEY", mDataInt);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.d(TAG, "onActivityCreated mDataint: " + mDataInt);

        if(savedInstanceState != null) {
            Log.d(TAG, "onActivityCreated savedInstanceState != null - dataInt: " + savedInstanceState.getInt("DATATINT_KEY"));
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我找到了这个问题的原因,我想在这里发帖,听听任何对此有一些想法的人。

在我已启用Don't keep activities的开发者选项下,我已禁用此选项。现在应用程序按预期工作