setRetainInstance(true)不会保留Fragment的成员变量

时间:2013-03-23 11:00:05

标签: android android-fragments

我正在使用无视图片段在我的Activity的方向更改期间存储一些数据。看起来大致如下:

public class BoardActivity extends BaseActivity {
    private DataHandler mDataHandler;

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

        // initialize the data handler
        mDataHandler = (DataHandler)mFragmentManager.findFragmentByTag("data");
        if (mDataHandler == null) {
            mDataHandler = new DataHandler();
            mFragmentManager.beginTransaction().add(mDataHandler, "data").commit();

            // initialize the data
            mDataHandler.mThreads = ...;
        } else {

            // here, the data is taken and the ListView is filled again.
            fillView();
        }
    }

    public static class DataHandler extends Fragment {
        private Topic[] mThreads;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setRetainInstance(true);
        }
    }
}

当发生活动时(例如使用主页按钮)并且出于某种原因在后台被杀死时,应用程序会在重新启动该活动时崩溃。原因是虽然片段mDataHandler是由FragmentManager找到的,但其成员变量(mThreads)是null

为什么片段本身可以被保留但是它的变量被设置为零?

1 个答案:

答案 0 :(得分:1)

  

为什么片段本身可以保留但其变量设置为零?

未保留片段。保留的片段仅用于配置更改。您没有进行配置更改。您的流程已终止,因为Android需要RAM来支持其他应用。