在android中更改方向后无法保存值
我尝试在使用onsaveinstancestate和onrestoreinstancestate旋转设备时保存值,但当我尝试在oncreate after orientation中提取数据时,它总是返回null。下面是我的代码在android中更改方向后无法保存值,android,android-orientation,Android,Android Orientation,我尝试在使用onsaveinstancestate和onrestoreinstancestate旋转设备时保存值,但当我尝试在oncreate after orientation中提取数据时,它总是返回null。下面是我的代码 @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { super.onSaveInstanceState(outS
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
outState.putString("driverscore",mdriverscore.getText().toString());
outState.putString("lastevent",recentevent.getText().toString());
outState.putString("rashdrivingcounttext",rdcount.getText().toString());
outState.putString("prespeedlimitcounttext",pslcount.getText().toString());
outState.putString("corneringcounttext",cornering.getText().toString());
outState.putInt("rashdrivingcount",mrdcount);
outState.putInt("prespeedlimitcount",mpslcount);
outState.putInt("corneringcount",mcornering);
outState.putInt("newrdcount",scorerd);
outState.putInt("newpslcount",scorepsl);
outState.putInt("newcornercount",scorecorner);
outState.putInt("distance",distance);
outState.putBoolean("istripinprogress",istripinprogress);
outState.putBoolean("ispersonidle",ispersonidle);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onRestoreInstanceState(savedInstanceState, persistentState);
mdriverscore.setText(savedInstanceState.getString("driverscore"));
recentevent.setText(savedInstanceState.getString("lastevent"));
rdcount.setText(savedInstanceState.getString("rashdrivingcounttext"));
pslcount.setText(savedInstanceState.getString("prespeedlimitcounttext"));
cornering.setText(savedInstanceState.getString("corneringcounttext"));
mrdcount = savedInstanceState.getInt("rashdrivingcount");
mpslcount = savedInstanceState.getInt("prespeedlimitcount");
mcornering = savedInstanceState.getInt("corneringcount");
scorerd = savedInstanceState.getInt("newrdcount");
scorepsl = savedInstanceState.getInt("newpslcount");
scorecorner = savedInstanceState.getInt("newcornercount");
distance = savedInstanceState.getInt("distance");
istripinprogress =savedInstanceState.getBoolean("istripinprogress");
ispersonidle = savedInstanceState.getBoolean("ispersonidle");
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newxml);
if (savedInstanceState != null) {
istripinprogress = savedInstanceState.getBoolean("istripinprogress");
ispersonidle = savedInstanceState.getBoolean("ispersonidle");
mrdcount =savedInstanceState.getInt("rashdrivingcount");
}
mrdcount返回null istripinprogress,ispersonidle返回默认值未保存值您必须覆盖
void onSaveInstanceState(Bundle outState)
从
void onSaveInstanceState(Bundle outState,PersistableBundle outPersistentState)
这与onSaveInstanceState(Bundle)相同,但为
属性persistableMode设置为的创建的活动
持久的红豆树
是否有任何具体的原因,你正在使用
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)
而不是
public void onSaveInstanceState(Bundle outState)
请使用单参数函数,即public void onSaveInstanceState(Bundle outState)
和public void onRestoreInstanceState(Bundle savedInstanceState)
,然后您的onCreate将能够从Bundle中获得值
希望这有帮助 onRestoreInstanceState是冗余的,因为您可以在onCreate中轻松恢复状态
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("driverscore",mdriverscore.getText().toString());
outState.putString("lastevent",recentevent.getText().toString());
outState.putString("rashdrivingcounttext",rdcount.getText().toString());
outState.putString("prespeedlimitcounttext",pslcount.getText().toString());
outState.putString("corneringcounttext",cornering.getText().toString());
outState.putInt("rashdrivingcount",mrdcount);
outState.putInt("prespeedlimitcount",mpslcount);
outState.putInt("corneringcount",mcornering);
outState.putInt("newrdcount",scorerd);
outState.putInt("newpslcount",scorepsl);
outState.putInt("newcornercount",scorecorner);
outState.putInt("distance",distance);
outState.putBoolean("istripinprogress",istripinprogress);
outState.putBoolean("ispersonidle",ispersonidle);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newxml);
if (savedInstanceState != null) {
mdriverscore.setText(savedInstanceState.getString("driverscore"));
recentevent.setText(savedInstanceState.getString("lastevent"));
rdcount.setText(savedInstanceState.getString("rashdrivingcounttext"));
pslcount.setText(savedInstanceState.getString("prespeedlimitcounttext"));
cornering.setText(savedInstanceState.getString("corneringcounttext"));
mrdcount = savedInstanceState.getInt("rashdrivingcount");
mpslcount = savedInstanceState.getInt("prespeedlimitcount");
mcornering = savedInstanceState.getInt("corneringcount");
scorerd = savedInstanceState.getInt("newrdcount");
scorepsl = savedInstanceState.getInt("newpslcount");
scorecorner = savedInstanceState.getInt("newcornercount");
distance = savedInstanceState.getInt("distance");
istripinprogress = savedInstanceState.getBoolean("istripinprogress");
ispersonidle = savedInstanceState.getBoolean("ispersonidle");
mrdcount =savedInstanceState.getInt("rashdrivingcount");
}
}
以下是官方文件对onRestoreInstanceState的说明:
大多数实现只需使用onCreate(Bundle)来恢复其状态,但有时在完成所有初始化后在此处执行此操作或允许子类决定是否使用默认实现是方便的。尝试在清单文件活动android:configChanges中添加这两个属性=“键盘隐藏|方向”