<< Android-Note
アクティビティを再構築するときの手順
アクティビティはバックグラウンドに移動しているときや画面が回転したときにonCreateが呼ばれて再構築されます。
そのときビューなどはあらかじめ保存されるのですがその他の変数の値などは保存されません。なので次の手順でアクティビティ側で変数の再構築をしてあげます。
onDestroyが呼ばれてアクティビティが破壊される
onSaveInstanceStateメソッドで保存しておきたい変数を保存する
アクティビティが再構築される
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メソッドに保存しています。
© Kaz