Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?
@hiking

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

More than 1 year has passed since last update.

アクティビティの作り方

  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 が渡される。
2
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
2
Help us understand the problem. What is going on with this article?