Java 即使使用setRetainInstance(true),oncreate中的片段也始终为null

Java 即使使用setRetainInstance(true),oncreate中的片段也始终为null,java,android,android-fragments,android-studio,Java,Android,Android Fragments,Android Studio,我想让一些数据持久化,并按照开发人员指南创建了一个数据片段类,以保存所有数据 在onCreate中,我使用以下逻辑来确定数据片段是否为null,这在《开发人员指南》中也有描述: find the retained fragment on activity restarts FragmentManager fm = getFragmentManager(); dataFragment = (DataFragment) fm.findFragmentByTag(“data”);

我想让一些数据持久化,并按照开发人员指南创建了一个数据片段类,以保存所有数据

在onCreate中,我使用以下逻辑来确定数据片段是否为null,这在《开发人员指南》中也有描述:

 find the retained fragment on activity restarts
    FragmentManager fm = getFragmentManager();
    dataFragment = (DataFragment) fm.findFragmentByTag(“data”);

// create the fragment and data the first time
if (dataFragment == null) {
    // add the fragment
    dataFragment = new DataFragment();
    fm.beginTransaction().add(dataFragment, “data”).commit();
    // load the data from the web
    dataFragment.setData(loadMyData());
} else {
    //loading data from dataRestoreFragment
}
super.onCreate(savedInstanceState);
但是dataFrag总是空的,即使在方向改变之后! 这里怎么了

编辑:

数据片段代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // retain this fragment
    setRetainInstance(true);
}
我必须提到,如果我在super.onCreatesavedInstanceState之后检查datafrag;它将工作并返回正确的片段,但问题是,我的另一个片段是ListFragment,它的适配器将在恢复数据之前被调用,因此我无法将数据加载到该片段中,该片段将没有数据并导致应用程序崩溃! 如果将代码放在super.onCreatesavedInstanceState之前,它将在Listfragment适配器之前执行,但它是空的


那么我该如何解决这个问题呢?

尝试添加类似的内容

@Override
public void onConfigurationChanged(Configuration newConfig) {
   super.onConfigurationChanged(newConfig);
   dataFragment.setData(collectMyLoadedData());
}
如果我在super.onCreatesavedInstanceState之后检查datafrag;它将工作并返回正确的片段

那就这样做吧

我的另一个片段是ListFragment,它的适配器将在恢复数据之前被调用,因此我无法将数据加载到该片段中,该片段将没有数据并导致应用程序崩溃


那么您的get called逻辑在该片段中的方法是错误的。您需要在片段生命周期的后期移动该逻辑,例如onViewCreated或onActivityCreated。

查看您是否启用了设备或模拟器上的“设置”>“开发人员选项”中的“不保留活动”。否,未选中@commonsware何时调用此方法?在奥德斯特罗之前?我已经在onDestroy中保存了数据,但在super.onCreate之前,activity的onCreate方法中的fragment为null。该方法处理方向更改。我最终将所有的fragment设置为setRetainInstancetrue,现在我也可以在横向模式下使用该应用程序,但我无法仅使用一个frag来处理数据