我想写一些帮助来保存和恢复活动状态从/到Bundle
仍然需要覆盖方法onCreate(Bundle savedState)
和onSaveInstanceState(Bundle outState)
,但简单的表单保存/恢复有点无聊
这样的事情:
class StateHelper {
static void restore(Bundle bundle, String[] properties, Object[] connections){
for(int i = 0; i < properties.length; i++){
if(bundle.containsKey(properties[i])){
restoreState(properties[i], connections[i]);
}
}
}
static void save(Bundle bundle, String[] properties, Object[] connections){
for(int i = 0; i < properties.length; i++){
saveState(properties[i], connections[i]);
}
}
restoreState(String s, Object o){
if(o instanceof EditText){
// restore state with getString
} else if(o instanceof Checkbox){
// save state with getBoolean
}
// etc. etc. handle all UI types
}
saveState(String s, Object o){
// similar to restoreState(String, Object)
// only saving instead of restoring
}
}
并使用如下:
String[] props = {LOGIN,PASSWORD,REALNAME};
Object[] cons = {textedit_login, textedit_password, textedit_realname};
StateHelper.restore(savedState, props, cons);
// or
StateHelper.save(outBundle, props, cons);
在我花一整天时间创建这个之前,我的问题是,是否有任何类似的帮助类或本机方式如何进行这种简单的保存/恢复操作?
答案 0 :(得分:1)
通常,如果调用super.onSaveInstanceState,则不需要保存UI状态,就像在助手中看到的那样。 Android框架负责保存UI状态,如javadocs:
中所述默认实现通过在具有id的层次结构中的每个视图上调用onSaveInstanceState()并保存当前焦点视图的id(所有这些都是由onRestoreInstanceState(Bundle)的默认实现恢复。如果您覆盖此方法以保存每个单独视图未捕获的其他信息,您可能希望调用默认实现,否则请准备好自己保存每个视图的所有状态。
因此,为了保存ui状态,它是内置的,为了保存你的应用程序的其他状态,你需要一些自定义逻辑。我认为没有任何通用的实用程序类。
答案 1 :(得分:1)
EditText或Checkbox等视图会自动保存/恢复其状态,您无需手动执行此操作。恢复发生在onRestoreInstanceState(Bundle)
,因此如果您覆盖此方法,请不要忘记致电super.onRestoreInstanceState(Bundle)
。