我无法在方向更改时保存字符串。我试过使用onSaveInstanceState()/onRestoreInstanceState()
但onRetainNonConfigurationInstance()/getLastNonConfigurationInstance()
没有运气。
我有:
@Override
public String onRetainNonConfigurationInstance(){
final String savedType = currentType;
return savedType;
}
在onCreate()
我有:
currentType = (String) getLastNonConfigurationInstance();
这对我还没有用,而且currentType
总是null
在方向改变之后。有什么建议么?
修订
所以这就是我目前拥有的,但它仍然无法正常工作:
@Override
protected void onSaveInstanceState(Bundle outState){
outState.putString("savedType", currentType);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
currentType = savedInstanceState.getString("savedType");
super.onRestoreInstanceState(savedInstanceState);
}
我已经尝试在super
我能想到的每种组合中将方法调用放在每个方法的开头和结尾,但是当再次创建视图时仍然得到一个NullPointerException
for 。currentType
还
这发生在一个对话框中,我不确定这是否与它有关,但认为这可能是一个有用的信息。
部分解决方案/部分新问题
所以我让这个工作有点像我想要的。当不再需要变量时,方法中隐藏了一条语句,该语句设置currentType
为生命周期结束时。null
现在已经不成问题了。屏幕将成功改变方向,但如果它在两者之间连续改变太快,它会 FC。这是我用来让它在这种状态下工作的:
类字段:
private String currentType;
最后onCreate
我有:
currentType = (String) getLastNonConfigurationInstance();
进而:
@Override
public Object onRetainNonConfigurationInstance() {
final String s = currentType;
return s;
}
如果方向没有改变然后很快又变回来,它就可以正常工作。不过我想解决这个问题,因为百货商店和零售店正在使用/将使用它,我可以看到人们丢弃它,这将导致 FC(把它放在我的沙发上进行测试)。我只存储一个字符串,所以我存储的内容不会占用太多内存。对这种新情况有什么建议吗?