Activity間のデータ転送_IntentとstartActivity ForResultの使用
2093 ワード
本節では,Activity間(AとB)のデータがどのように伝達されるかについて述べる.
1、
A->B:AはBにジャンプしながら、いくつかのデータをBに渡す
コード実装:簡単で、AでIntentを生成するときに、伝達するデータをIntentに置くだけで、以下のようにします:(1)A
ここでは「トム&jerry」をBに伝えたいだけなのでintentを使うだけです.putExtras(String,String)でよいが,本例ではbundleを用いて一度カプセル化するのは,主に少し複雑なデータがあればbundleを用いることができることを考慮したものである.
(2)B
BでAから渡されたデータを受け取るには、Bのoncreate()で次のように処理します.
2、
Bデータを得た後、Aに戻りたい(または、データを処理してからAに戻りたい).
私たちはまだ1のようにデータを再カプセル化しなければならないのではないでしょうか.もしこのデータのカプセル化過程が面倒だったら、大変ではないでしょうか.答えは否定的だ.AでstartActivity ForResult(intent,0)を使用してBを起動し、0は次のactivityが返す根拠となり、onActivity Resultメソッドを書き換えることができます.以下のようにします.
(1)AでBにジャンプする際にstartActivity(intent)ではなく次のように使用する.
(2)AでonActivity Resultメソッドを書き換える
(3)Bでは、「Bに戻る」ボタンを使用して、onclickで一言だけ
実は、BでstartActivity(B.this,A.class)を直接使用し、AのoncreateでIntentにデータがあるかどうかを判断し、ある場合はデータを持ち込み、ない場合はnull値を入力するという方法も実現できますが、少し面倒ですが、システムが私たちにこのstartActivity ForResultの方法を提供してくれた以上、私たちはどうして使わないのですか.
1、
A->B:AはBにジャンプしながら、いくつかのデータをBに渡す
コード実装:簡単で、AでIntentを生成するときに、伝達するデータをIntentに置くだけで、以下のようにします:(1)A
Intent intent = new Intent();
intent.setClass(A.this, B.class);
Bundle bundle = new Bundle();
bundle.putString("story", "Tom&jerry");
intent.putExtra("tag", bundle);
startActivity(intent);
ここでは「トム&jerry」をBに伝えたいだけなのでintentを使うだけです.putExtras(String,String)でよいが,本例ではbundleを用いて一度カプセル化するのは,主に少し複雑なデータがあればbundleを用いることができることを考慮したものである.
(2)B
BでAから渡されたデータを受け取るには、Bのoncreate()で次のように処理します.
Intent intent = getIntent();
Bundle bundle = intent.getBundleExtra("tag");
String storyName = bundle.getString("story");
2、
Bデータを得た後、Aに戻りたい(または、データを処理してからAに戻りたい).
私たちはまだ1のようにデータを再カプセル化しなければならないのではないでしょうか.もしこのデータのカプセル化過程が面倒だったら、大変ではないでしょうか.答えは否定的だ.AでstartActivity ForResult(intent,0)を使用してBを起動し、0は次のactivityが返す根拠となり、onActivity Resultメソッドを書き換えることができます.以下のようにします.
(1)AでBにジャンプする際にstartActivity(intent)ではなく次のように使用する.
startActivityForResult(intent, 0);
(2)AでonActivity Resultメソッドを書き換える
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
switch (resultCode) {
case RESULT_OK:
Bundle bundle = data.getBundleExtra("tag");
String storyName = bundle.getString("story");
tv1.setText(storyName);
break;
default:
break;
}
}
(3)Bでは、「Bに戻る」ボタンを使用して、onclickで一言だけ
B.this.setResult(RESULT_OK,intent);
はAインタフェースに戻り、Aにデータを転送することができ、intentのデータはAが最初に転送したデータであってもよいし、Bが処理したデータであってもよい.実は、BでstartActivity(B.this,A.class)を直接使用し、AのoncreateでIntentにデータがあるかどうかを判断し、ある場合はデータを持ち込み、ない場合はnull値を入力するという方法も実現できますが、少し面倒ですが、システムが私たちにこのstartActivity ForResultの方法を提供してくれた以上、私たちはどうして使わないのですか.