動かざることバグの如し

近づきたいよ 君の理想に

Androidのアクティビティを遷移させてみる その2

データを渡してみる

ただ単にアクティビティを切り替えるだけなら以下の2行で済む。

Intent i = new Intent (this, SubActivity.class);
startActivity(i);

が、移動先のアクティビティにデータを渡したい場合はBundleにデータを埋め込んで渡す。
例えば元のアクティビティで名前と年齢を入力して移動先のアクティビティで処理したい場合、あらかじめ入力された文字列を取得しておいて以下のようにデータを登録する。データは複数登録した場合、区別がつかなくなってしまうのでKeyをデータに括りつけてあげる。今回は「名前」と「年齢」がKeyである。登録したらputExtrasを忘れずに。

Bundle bandle = new Bundle();
bandle.putString("名前", name);
bandle.putString("年齢", age);
i.putExtras(bandle);

画面切り替え後の処理が以下

Intent intent = getIntent();
// IntentからBundleを取り出す
Bundle bundle = intent.getExtras();
if (bundle != null) {
	// Bundleからデータを取り出す
	String name = bundle.getString("名前");
	String age = bundle.getString("年齢");
//↓以下処理内容

ArrayListを渡す場合は注意が必要

先ほどの通り、Bandleに登録→putExtrasしていたが、ArrayListを渡す場合にはエラーになる。
てかArrayListの場合はBandle必要ない。
例えば以下の様なStringなArrayListがあったとする

ArrayList<String> list = new ArrayList<String>();
list.add("hoge");
list.add("piyo");
list.add("fuga");

このArrayListを渡すにはputStringArrayListExtraを使う。

Intent i = new Intent (this, SubActivity.class);
i.putStringArrayListExtra("com.example.********", list);

今回はString型だったからputStringArrayListExtraであり、例えばIntgerならputIntegerArrayListExtraとなる。

切り替え先のアクティビティでは

ArrayList<String> list = intent.getStringArrayListExtra("com.example.********");
String str = list.get(0); //hoge

渡したいデータが複数あった場合どっちでやった方が楽なんだろ・・・?