Активность состояния сохранения и восстановления помощника - PullRequest
0 голосов
/ 29 ноября 2011

Я хотел бы написать какой-нибудь помощник для сохранения и восстановления состояния активности из / в 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 ]

1 голос
/ 29 ноября 2011

Виды, такие как EditText или Checkbox, сохраняют / восстанавливают свои состояния автоматически, вам не нужно делать это вручную. Восстановление происходит в onRestoreInstanceState(Bundle), поэтому, если вы переопределите этот метод, не забудьте вызвать super.onRestoreInstanceState(Bundle).

1 голос
/ 29 ноября 2011

Как правило, вам не нужно сохранять состояние пользовательского интерфейса, как вы делаете это в вашем помощнике, если вы вызываете super.onSaveInstanceState.Платформа Android заботится о сохранении состояния пользовательского интерфейса, как указано в javadocs :

. Реализация по умолчанию заботится о большинстве состояний пользовательского интерфейса для каждого экземпляра, вызывая onSaveInstanceState.() для каждого представления в иерархии, имеющего идентификатор, и путем сохранения идентификатора текущего сфокусированного представления (все из которых восстанавливаются реализацией onRestoreInstanceState (Bundle) по умолчанию).Если вы переопределите этот метод для сохранения дополнительной информации, не захваченной каждым отдельным представлением, вы, вероятно, захотите обратиться к реализации по умолчанию, в противном случае будьте готовы сохранить все состояния каждого представления самостоятельно.

Таким образом, для сохранения состояния пользовательского интерфейса, оно встроено, чтобы сохранить другое состояние вашего приложения, вам понадобится некоторая пользовательская логика.Я не думаю, что для этого есть какой-либо универсальный служебный класс.

...