活动状态保存和恢复帮助程序

时间:2011-11-29 10:21:20

标签: java android bundle savestate

我想写一些帮助来保存和恢复活动状态从/到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);

在我花一整天时间创建这个之前,我的问题是,是否有任何类似的帮助类或本机方式如何进行这种简单的保存/恢复操作?

2 个答案:

答案 0 :(得分:1)

通常,如果调用super.onSaveInstanceState,则不需要保存UI状态,就像在助手中看到的那样。 Android框架负责保存UI状态,如javadocs

中所述
  

默认实现通过在具有id的层次结构中的每个视图上调用onSaveInstanceState()并保存当前焦点视图的id(所有这些都是由onRestoreInstanceState(Bundle)的默认实现恢复。如果您覆盖此方法以保存每个单独视图未捕获的其他信息,您可能希望调用默认实现,否则请准备好自己保存每个视图的所有状态。

因此,为了保存ui状态,它是内置的,为了保存你的应用程序的其他状态,你需要一些自定义逻辑。我认为没有任何通用的实用程序类。

答案 1 :(得分:1)

EditText或Checkbox等视图会自动保存/恢复其状态,您无需手动执行此操作。恢复发生在onRestoreInstanceState(Bundle),因此如果您覆盖此方法,请不要忘记致电super.onRestoreInstanceState(Bundle)