LoginSignup
0
2

More than 3 years have passed since last update.

【初心者向け】Android アプリの基本:アクティビティ

Last updated at Posted at 2019-10-03

アクティビティの作り方

  1. Activity クラスを継承したクラスを作る。
  2. UIを定義したレイアウトファイルを用意。
  3. onCreate() メソッドを定義。
  4. onCreate() 内で setContentView() を使ってレイアウトファイルのビュー定義をアクティビティに追加。

アクティビティの起動

  1. インテントをインスタンス化する。

    Intent intent = new Intent(this, xxxActivity.class);
    
  2. インテントを引数にして、startActivity()メソッドを実行する。

    startActivity(intent);
    

アクティビティの起動メソッド 2種

  • startActivity():アクティビティを起動するのみ。
  • startActivityForResult():アクティビティを起動し、それが終了した際に起動元に結果を返す。

アクティビティの終了

  • finish()メソッドで終了する。
    【注意】finish()でアクティビティは閉じられるが、そのアクティビティが直ぐに破棄される(onDestroy()が呼ばれる)わけではない。アクティビティ破棄がスケジュールされてそれが処理されて onDestory() となる。

アクティビティ間でのデータ受け渡し(例:AからBへ)

  1. インテントのインスタンス生成
  2. B を起動するインテントのエクストラに渡したいデータをセットする。
  3. B を起動する。
    ※ 起動には startActivity()/startActivityForResult() どちらを用いてもよい。
  4. B にて、 Activity#getIntent() でインテントを取得する
  5. そこからデータ(エクストラ)を取り出す。(データ型に合わせ、getXXExtraを使う)

B(終了)→Aの遷移で、BからAのアクティビティへのデータ渡し

  1. B の起動に startActivityForResult() を用いる。
  2. B を終了する前に返したいデータをエクストラに設定したインテントを作りActivity#setResult() でそのインテントをセット。
  3. A に戻ると A 側で onActivityResult() メソッドが自動で呼ばれ、その引数で B で setResult() したインテントが渡されるのでそこでデータを受け取る。

アクティビティが再生成される状況(2つ)

  • 端末の回転などのコンフィグレーションが変更されたとき。
  • アクティビティをバックグラウンドにし、メモリ不足などでアクティビティが破棄され、そのあとフォアグラウンドに戻したとき。

再生成後のデータの変化

  • 再生成後、フィールド値は消える。
  • ビューの値:消えない
    標準ビューは再生成で状態を復元するようなメソッドがある。

アクティビティの状態を保存・復元の方法

  • 保存

    • onSaveInstanceState() が onStop() の前に必ず呼ばれる。
    • onSaveInstanceState() の引数に渡される Bundle (outState) にセットすることで行う。
  • 復元

    • onRestoreInstanceState() は onResume() の前だが、再生成時のときしか呼ばれない。
    • onRestoreInstanceState() または onCreate() の引数の Bundle (savedInstanceState) から取り出して行う。
    • 再生成ではない場合、onCreate() の savedInstanceState は null が渡される。
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2