No15, 16 インテントについて
Index
- Androidの画面遷移
- インテント
- ライフサイクル
Androidの画面遷移
アンドロイドの画面遷移は、上に乗る形で行われる。
詰まる話、ダイアログやポップアップをイメージすると良い。
この仕様をリストビューと呼ぶ。
元の画面に戻るときは、今の画面を消すことによって裏にかくれていた画面が表にでてくる。
別の画面の軌道を制御する仕組みが、__インテント__であり、その中心となるクラスがIntent
クラス。
インテントの使い方は下記の2種類の方法が存在している。
- 明示的インテント: 同一アプリ内で別の画面の軌道
- 暗黙的インテント: アプリ間での画面起動(謎?)
インテント
アクティビティ登録
Androidアプリに画面を追加するには下記の3個の作業を行う
- アクティビティクラスを作成する。
- Layout.xmlファイルを作成する。
- AndroidManifest.xmlに登録する。
<activity android:name=".className" />
manifestの書き方は公式を参照することとする。
tips
メインアクティビティはアプリの起動時アクティビティ
AndroidStudioがあらかじめ記述するもの。
上記の3作業を自動的に行ってくれるものが、AndroidStudioに備わっているので、それを利用すると良い。
File > New > Activity > EmptyActivity (間違えないようにしよう))
画面の起動
今の画面から別の画面を起動するには以下の手順をとる。
- Intentオブジェクトを生成する
Intent intent = new Intent(...Activity.this, ...Activity.class);
- Intent(コンテキスト, アクティビティクラス);
-
項目1
を引数としてアクティビティを起動する。 startActivity(intent);
遷移先の画面にデータを渡す
putExtra(StringKey, ObjectValue)
を使用し、データを譲渡する。
intent.putExtra("SelectedPictNo", position);
...tips 実際にはこの処理で、IntentのBundleオブジェクトにデータが格納されている。
移動先ではonCreateが起動する。
起動する側はインテントがあるのでgetしてくる。
// 遷移元から Intent を取得する。
Intent intent = getIntent();
// データの入っている extras を取得しに行く
Bundle extras = intent.getExtras();
// 何も入っていない場合はnullとなるので、validation check
if ( extras != null ){
selectedPictNo = extras.getInt(key);
selectedPictName = extras.getString(key);
}
解説
起動先アクティビティでデータをうけとるには以下の手順をとる
- Intentオブジェクトを取得
Intent intent = getIntent();
- Bundleオブジェクトを取得
Bundle extras = intent.getExtras();
- BundleオブジェクトのnullCheckを実施
if ( extras != null ) {/*処理*/}
- Bundleオブジェクトから、
extras.get○○(key)
メソッドを使用し、データを取得
tips
String selectedPictName = intent.getStringExtra("selectedPictName");
上記のように、Intentオブジェクトから直接取得する方法もある。
ただし第二引数として初期値を記述しないとだめなことがほとんど(NullPointerException回避のため)
`String selectedPictNo = intent.getStringExtra("selectedPictName", "初期STR");