2010-12-29 10 views
0

私が理解する限り、onSaveInstanceState()onRestoreInstanceState()メソッドは、アクティビティの状態が約onPause()になる前に動的データを格納するためのものです。私は単純なActivityボタンをクリックしてそのテキストを変更するボタンを作った。私は自分の体に何もないと、これらのメソッドの両方をオーバーライドしました:onRestoreInstanceState()がオーバーライドされている間の状態の変化

@Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
     super.onRestoreInstanceState(savedInstanceState); 
    } 

私はhiddingだとアプリのホーム画面と背面に移動させることによって活性を回復します。アクティビティが復元されたとき、ボタンのテキストは、私が期待したようにデフォルトではありませんが、アクティビティをonPause()に渡す前と同じです。 onRestoreInstanceState()メソッドが空の場合はどうすれば動作しますか?

もっと奇妙なもの - 私はこれらの2つのメソッドが呼び出されているときにデバッグしようとしましたが、onRestoreInstanceState()が呼び出されていないことに気付きました。

答えて

0

アクティビティの状態がon()になる前にダイナミックデータを格納することを意図しています。

かなりです。 onSaveInstanceState()のドキュメントでは、

"このメソッドは、onStop()の前に実行されますが、onPause()の前後に発生するかどうかは保証されていません。

私はホーム画面に移動してアプリに戻ることで、活動を隠して復元しています。

これは、トリガーの可能性があります。onSaveInstanceState()onRestoreInstanceState()をトリガーする可能性は低いです。これらのメソッドをテストするより良い方法は、画面の向きを変更することです。

アクティビティが復元されると、期待どおりボタンのテキストはデフォルトではありませんが、アクティビティをonPause()に渡す前と同じです。

ユーザーはボタンを入力できないため、デフォルトの実装onSaveInstanceState()はそれらを無視します。

+0

デバイスの向きを変更すると、受信したBundleをデータの復元に使用する必要がある場合にonCreate()が呼び出されるため、さまざまな状況が発生しています。私が望むのは、それらの2つの方法が働いている方法を見つけることです。そして、はい、ユーザーがボタンで入力することはできません、私は保存/復元方法を確認するために、デフォルトのテキストを変更しています。 – Eugene

+0

@AndroidNoob: 'onRestoreInstanceState()'が呼び出される場合、 'onCreate()'は常に*呼び出されます。したがって、画面の向きを変更してください。 "保存/復元の方法をチェックするためにデフォルトのテキストを変更しています" - 次に、自分自身の "状態"を 'onSaveInstanceState()'に保存し、 'onRestoreInstanceState()'に復元する必要があります。 – CommonsWare

+0

ご清聴ありがとうございます。 – Eugene

関連する問題