69

向きを変えてもデータを保存しようとしています。以下のコードに示されているように、私はonSaveInstanceState()andを使用していonRestoreInstanceState()ます。保存された値を取得しようとし、それが正しい値であるかどうかを確認しますonRestoreInstanceState()。しかし、 で新しい値を使用しようとすると、新しい値でonCreate()はなく古い値が表示されます。

protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("TEXT", user);

    }
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    savedUser = savedInstanceState.getString("TEXT");
    Log.d("enregistred value", savedUser);

}



public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        int display_mode = getResources().getConfiguration().orientation;

        if (display_mode == 1) {

            setContentView(R.layout.main_grid);
            mGrid = (GridView) findViewById(R.id.gridview);
            mGrid.setColumnWidth(95);
            mGrid.setVisibility(0x00000000);
            // mGrid.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);

        } else {
            setContentView(R.layout.main_grid_land);
            mGrid = (GridView) findViewById(R.id.gridview);
            mGrid.setColumnWidth(95);
            Log.d("Mode", "land");
            // mGrid.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);

        }
        Log.d("savedUser", savedUser);
        if (savedUser.equals("admin")) { //value 0
            adapter.setApps(appManager.getApplications());
        } else if (savedUser.equals("prof")) { //value 1
            adapter.setApps(appManager.getTeacherApplications());
        } else {// default value
            appManager = new ApplicationManager(this, getPackageManager());
            appManager.loadApplications(true);
            bindApplications();
        }
}
4

3 に答える 3

21
  • onSaveInstanceState()アクティビティを一時停止する前にデータを保存するために使用されるメソッドです。

説明 :ビューがその内部状態の表現を生成できるようにするフックで、後で同じ状態の新しいインスタンスを作成するために使用できます。この状態には、永続的ではないか、後で再構築できない情報のみを含める必要があります。たとえば、ビューの新しいインスタンスがそのビュー階層に配置されたときに再度計算されるため、画面上の現在の位置を保存することはありません。

  • onRestoreInstanceState()そのデータを取得するために使用されるメソッドです。

説明 :このメソッドは、アクティビティが以前に保存された状態から再初期化されているときに onStart() の後に呼び出されます。ほとんどの実装は単に onCreate(Bundle) を使用して状態を復元しますが、すべての初期化が完了した後にここで行うか、サブクラスがデフォルトの実装を使用するかどうかを決定できるようにすることが便利な場合があります。このメソッドのデフォルトの実装は、onSaveInstanceState(Bundle) によって以前に凍結されたビュー ステートの復元を実行します。

ここでこの例を考えてみましょう:
アプリには、ユーザーが情報を入力する 3 つの編集ボックスがありますが、電話がかかるため、上記の方法を使用しなかった場合、入力したものはすべて失われます。
そのため、現在のデータを常にonPause()アクティビティのメソッドにバンドルとして保存し、メソッド内でonResume()メソッドを呼び出しますonRestoreInstanceState()

参照してください :

onSavedInstanceState の使用例を教えてください

http://www.how-to-develop-android-apps.com/tag/onrestoreinstancestate/

于 2013-05-27T09:03:39.387 に答える