Help us understand the problem. What is going on with this article?

Android Intent

More than 1 year has passed since last update.

No15, 16 インテントについて

Index

  1. Androidの画面遷移
  2. インテント
  3. ライフサイクル

Androidの画面遷移

アンドロイドの画面遷移は、上に乗る形で行われる。

詰まる話、ダイアログやポップアップをイメージすると良い。

この仕様をリストビューと呼ぶ。

元の画面に戻るときは、今の画面を消すことによって裏にかくれていた画面が表にでてくる。

別の画面の軌道を制御する仕組みが、インテントであり、その中心となるクラスがIntentクラス。

インテントの使い方は下記の2種類の方法が存在している。

  • 明示的インテント: 同一アプリ内で別の画面の軌道
  • 暗黙的インテント: アプリ間での画面起動(謎?)

インテント

アクティビティ登録

Androidアプリに画面を追加するには下記の3個の作業を行う

  1. アクティビティクラスを作成する。
  2. Layout.xmlファイルを作成する。
  3. AndroidManifest.xmlに登録する。

<activity android:name=".className" />

manifestの書き方は公式を参照することとする。

tips

メインアクティビティはアプリの起動時アクティビティ

AndroidStudioがあらかじめ記述するもの。

上記の3作業を自動的に行ってくれるものが、AndroidStudioに備わっているので、それを利用すると良い。

File > New > Activity > EmptyActivity (間違えないようにしよう))

画面の起動

今の画面から別の画面を起動するには以下の手順をとる。

  1. Intentオブジェクトを生成するIntent intent = new Intent(...Activity.this, ...Activity.class);
    • Intent(コンテキスト, アクティビティクラス);
  2. 項目1を引数としてアクティビティを起動する。 startActivity(intent);

遷移先の画面にデータを渡す

putExtra(StringKey, ObjectValue)を使用し、データを譲渡する。

example.java
intent.putExtra("SelectedPictNo", position);

...tips 実際にはこの処理で、IntentのBundleオブジェクトにデータが格納されている。

Untitled Diagram.jpg

移動先ではonCreateが起動する。

起動する側はインテントがあるのでgetしてくる。

遷移後の画面.java
// 遷移元から Intent を取得する。
Intent intent = getIntent();
// データの入っている extras を取得しに行く
Bundle extras = intent.getExtras();

// 何も入っていない場合はnullとなるので、validation check
if ( extras != null ){
    selectedPictNo = extras.getInt(key);
    selectedPictName = extras.getString(key);
}

解説

起動先アクティビティでデータをうけとるには以下の手順をとる

  1. Intentオブジェクトを取得 Intent intent = getIntent();
  2. Bundleオブジェクトを取得 Bundle extras = intent.getExtras();
  3. BundleオブジェクトのnullCheckを実施 if ( extras != null ) {/*処理*/}
  4. Bundleオブジェクトから、extras.get○○(key)メソッドを使用し、データを取得

tips

String selectedPictName = intent.getStringExtra("selectedPictName");

上記のように、Intentオブジェクトから直接取得する方法もある。

ただし第二引数として初期値を記述しないとだめなことがほとんど(NullPointerException回避のため)

`String selectedPictNo = intent.getStringExtra("selectedPictName", "初期STR");

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
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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