###アクティビティの作り方
- Activity クラスを継承したクラスを作る。
- UIを定義したレイアウトファイルを用意。
- onCreate() メソッドを定義。
- onCreate() 内で setContentView() を使ってレイアウトファイルのビュー定義をアクティビティに追加。
###アクティビティの起動
-
インテントをインスタンス化する。
Intent intent = new Intent(this, xxxActivity.class);
-
インテントを引数にして、startActivity()メソッドを実行する。
startActivity(intent);
###アクティビティの起動メソッド 2種
- startActivity():アクティビティを起動するのみ。
- startActivityForResult():アクティビティを起動し、それが終了した際に起動元に結果を返す。
###アクティビティの終了
- finish()メソッドで終了する。
【注意】finish()でアクティビティは閉じられるが、そのアクティビティが直ぐに破棄される(onDestroy()が呼ばれる)わけではない。アクティビティ破棄がスケジュールされてそれが処理されて onDestory() となる。
###アクティビティ間でのデータ受け渡し(例:AからBへ)
- インテントのインスタンス生成
- B を起動するインテントのエクストラに渡したいデータをセットする。
- B を起動する。
※ 起動にはstartActivity()
/startActivityForResult()
どちらを用いてもよい。 - B にて、
Activity#getIntent()
でインテントを取得する - そこからデータ(エクストラ)を取り出す。(データ型に合わせ、getXXExtraを使う)
###B(終了)→Aの遷移で、BからAのアクティビティへのデータ渡し
- B の起動に
startActivityForResult()
を用いる。 - B を終了する前に返したいデータをエクストラに設定したインテントを作り
Activity#setResult()
でそのインテントをセット。 - A に戻ると A 側で
onActivityResult()
メソッドが自動で呼ばれ、その引数で B でsetResult()
したインテントが渡されるのでそこでデータを受け取る。
###アクティビティが再生成される状況(2つ)
- 端末の回転などのコンフィグレーションが変更されたとき。
- アクティビティをバックグラウンドにし、メモリ不足などでアクティビティが破棄され、そのあとフォアグラウンドに戻したとき。
###再生成後のデータの変化
- 再生成後、フィールド値は消える。
- ビューの値:消えない
標準ビューは再生成で状態を復元するようなメソッドがある。
###アクティビティの状態を保存・復元の方法
-
保存
- onSaveInstanceState() が onStop() の前に必ず呼ばれる。
- onSaveInstanceState() の引数に渡される Bundle (outState) にセットすることで行う。
-
復元
- onRestoreInstanceState() は onResume() の前だが、再生成時のときしか呼ばれない。
- onRestoreInstanceState() または onCreate() の引数の Bundle (savedInstanceState) から取り出して行う。
-
再生成ではない場合、onCreate() の savedInstanceState は null が渡される。