アクティビティを再構築するときの手順

アクティビティはバックグラウンドに移動しているときや画面が回転したときにonCreateが呼ばれて再構築されます。

そのときビューなどはあらかじめ保存されるのですがその他の変数の値などは保存されません。なので次の手順でアクティビティ側で変数の再構築をしてあげます。

  1. onDestroyが呼ばれてアクティビティが破壊される

  2. onSaveInstanceStateメソッドで保存しておきたい変数を保存する

  3. アクティビティが再構築される

  4. onRetainInstanceStateメソッドで保存した値を取り出す。

この手順で変数を保存して再構築の時に取り出すコードを書くと例えば次のようになります。

public class MainActivity extends FragmentActivity 
{
    
    int myNum = 1;
    String MY_NUM_KEY ="MY_NUM";

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button addButton = (Button)findViewById(R.id.add_button);
        addButton.setOnClickListener(new View.onClickListener(){
            public void onClick(View)
            {
                ++i;
            }
        };
    }

    @Override
    public void onSaveInstanceState(Bundle outState)
    {
        //アクティビティが再構築される前の値を保存する。
        super.onSaveInstanceState(outState);
        outState.putInt(MY_NUM_KEY, myNum);
    }
    
    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState)
    {
        //保存した値を取り出す。
        super.onRestoreInstanceState(savedInstanceState);
        
        myNum = savedInstanceState.getInt(MY_NUM_KEY);
        Log.i("MainActivity : ", "myNum = " + myNum);
    }
}

この例でやっていることはボタンが押されるたびにmyNumという変数に1ずつ足していってアプリがバックグラウンドに行くか画面が回転したときにその値をonSavedInstanceStateメソッドに保存しています。

関連項目
プライバシーポリシー