0

バンドルとの間でアクティビティの状態を保存および復元するための何らかのヘルパーを作成したいと思います

メソッド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);

そして、これを作成するために丸一日を費やす前に、私の質問は、この単純な保存/復元アクションを行うための同様のヘルパー クラスまたはネイティブな方法はありますか?

4

2 に答える 2

1

通常、super.onSaveInstanceState を呼び出す場合にヘルパーで行うように、UI の状態を保存する必要はありません。Android フレームワークは、 javadocsに記載されているように、UI の状態を保存します。

デフォルトの実装では、ID を持つ階層内の各ビューで onSaveInstanceState() を呼び出し、現在フォーカスされているビューの ID を保存することで、インスタンスごとの UI 状態の大部分を処理します (これらはすべて、 onRestoreInstanceState(Bundle) のデフォルト実装)。このメソッドをオーバーライドして、個々のビューによってキャプチャされていない追加情報を保存する場合は、デフォルトの実装を呼び出す必要があります。それ以外の場合は、各ビューのすべての状態を自分で保存する準備をしてください。

したがって、UI の状態を保存するには、それが組み込まれています。アプリの他の状態を保存するには、いくつかのカスタム ロジックが必要になります。そのための汎用ユーティリティクラスはないと思います。

于 2011-11-29T11:00:00.347 に答える
1

EditText や Checkbox などのビューは、状態を自動的に保存/復元します。手動で行う必要はありません。復元は でonRestoreInstanceState(Bundle)行われるため、このメソッドをオーバーライドする場合は、 を呼び出すことを忘れないでくださいsuper.onRestoreInstanceState(Bundle)

于 2011-11-29T11:00:16.447 に答える