Android 如何正确保存和恢复嵌套片段的实例?
我有一个使用嵌套片段的活动。在我第一次访问变量的客户那里,我可以看到很多崩溃,因为它们仍然为空。我认为这与前台应用程序更改时使用savedInstanceState重新创建的活动和/或片段有关。 活动将自身设置为片段中的一个变量,因此我可以将其用于一些Android函数。但我无法在片段中使活动可序列化,因此我被迫采用了一种丑陋的解决方案,即即使使用非null的savedInstanceState重新创建活动时,我也总是重新创建片段 可能仍然存在这样的情况:仅使用非null savedInstanceState重新创建片段,而不使用活动?无论如何,我想知道什么是最好的解决方案,以便activity和fragment能够正确地恢复其状态,以及如何保持fragment与activity变量之间的连接Android 如何正确保存和恢复嵌套片段的实例?,android,android-fragments,onsaveinstancestate,Android,Android Fragments,Onsaveinstancestate,我有一个使用嵌套片段的活动。在我第一次访问变量的客户那里,我可以看到很多崩溃,因为它们仍然为空。我认为这与前台应用程序更改时使用savedInstanceState重新创建的活动和/或片段有关。 活动将自身设置为片段中的一个变量,因此我可以将其用于一些Android函数。但我无法在片段中使活动可序列化,因此我被迫采用了一种丑陋的解决方案,即即使使用非null的savedInstanceState重新创建活动时,我也总是重新创建片段 可能仍然存在这样的情况:仅使用非null savedInstan
public class BaseSettingsActivity extends Activity {
public BaseSettingsFragment mPrefFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPrefFragment = new BaseSettingsFragment();
if (savedInstanceState != null) {
mPrefFragment.baseSettingsData.fromSavedInstance(savedInstanceState);
} else {
mPrefFragment.baseSettingsData.fromIntent(getIntent(),this);
}
mPrefFragment.context=this;
mPrefFragment.activity=this;
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(android.R.id.content, prefFragment);
fragmentTransaction.commit();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
mPrefFragment.baseSettingsData.toSavedInstance(outState);
super.onSaveInstanceState(outState);
}
public static class BaseSettingsFragment extends PreferenceFragment {
public BaseSettingsData baseSettingsData=new BaseSettingsData();
public Context context; // how to keep context in fragment for saved instances?
public BaseSettingsActivity activity; // how to keep activity variable in fragment for saved instances?
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int d=baseSettingsData.mAppSettings.speed; // creates nullpointer crash for some customers
}
}
}
public class BaseSettingsData {
public AppSettings mAppSettings;
public void toIntent(Intent intent) {
intent.putExtra("appSettings", mAppSettings);
}
public void fromIntent(Intent data, Context context) {
mAppSettings = (AppSettings) data.getSerializableExtra("appSettings");
}
public void toSavedInstance(Bundle outState) {
outState.putSerializable("appSettings",mAppSettings);
}
public void fromSavedInstance(Bundle savedInstanceState) {
mAppSettings=(AppSettings)savedInstanceState.getSerializable("appSettings");
}
}
public class AppSettings implements Serializable {
public int speed=6;
}