问题描述
我有一个正在使用嵌套片段的活动。我可以看到许多客户第一次访问变量时发生的崩溃,因为它们仍然为空。我认为这与更改前台应用程序时使用saveInstanceState重新创建的活动和/或片段有关。 该活动将自身设置为片段中的变量,因此我可以将其用于某些Android函数。但是我无法使活动在片段中可序列化,因此我被迫寻求一个丑陋的解决方案,其中即使使用非null saveInstanceState来重新创建活动,我也总是重新创建片段。
也许在某些情况下,仅使用非null savedInstanceState而不是活动来重新创建片段?无论如何,我想知道什么是最好的解决方案,以便活动和片段可以正确恢复其状态,以及如何保持片段与活动变量之间的连接。
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;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)