android startActivity ForResultに基づく学習心得のまとめ
3379 ワード
昨夜から今までやっとstartActivity ForResultの例をデバッグしました.ネット上では複雑すぎるか、あいまいなことを言っているか、私はたくさんの回り道をしたので、心得を書きました.
1つのメインインタフェース(メインActivity)に多くの異なるサブ機能モジュール(サブActivity)に接続でき、サブモジュールの作業が完了するとメインインタフェースに戻り、サブモジュールが完了したデータをメインActivity処理に渡す.startActivityでメインインタフェースを起動するのは新しいIntentインスタンスですが、アクセスしたメインインタフェースはactivityスタックの下で呼び出されていません.このような最大の問題は、元のインタフェースに戻らないと、複数のサブ機能モジュールがメインインタフェースにデータやサービスを提供できないことです.この時はstartActivity ForResultを使います!
目的:MainActivity.JAvaはメインインタフェースJAvaはサブ機能モジュールで、mainからsecondを起動し、secondはmainからのデータを受け取って仕事を終えた後、ボタンOKを押すと結果をmainに報告し、同時に自分で閉じてmainに戻る.
具体的な実装:4つの部分に分かれています.
1,MainActivityにボタンsendBuddleを設定し,SecondActivityにデータを送信するとともにsecondインタフェースにジャンプする.キーリスニングコード:
2,SecondActivityのOnCreate関数でmainからのintentからのデータを受信する.
3,SecondActivityでOkボタンの傍受を行い,押すとMainActivityに戻り,同時に自分で閉じてMainActivityにデータを送信する.OKボタンの傍受コードは以下の通りです.
4,mainに戻ると,mainはsecondからのデータを受信する.MainActivityでそのOnActivity Resultメソッドを複写します.
注意:この中にはIntentを新設しないでください.onActivity Resultには3つのパラメータがあります.3つ目のパラメータはIntentです.彼をパラメータにすればいいだけです.
1つのメインインタフェース(メインActivity)に多くの異なるサブ機能モジュール(サブActivity)に接続でき、サブモジュールの作業が完了するとメインインタフェースに戻り、サブモジュールが完了したデータをメインActivity処理に渡す.startActivityでメインインタフェースを起動するのは新しいIntentインスタンスですが、アクセスしたメインインタフェースはactivityスタックの下で呼び出されていません.このような最大の問題は、元のインタフェースに戻らないと、複数のサブ機能モジュールがメインインタフェースにデータやサービスを提供できないことです.この時はstartActivity ForResultを使います!
目的:MainActivity.JAvaはメインインタフェースJAvaはサブ機能モジュールで、mainからsecondを起動し、secondはmainからのデータを受け取って仕事を終えた後、ボタンOKを押すと結果をmainに報告し、同時に自分で閉じてmainに戻る.
具体的な実装:4つの部分に分かれています.
1,MainActivityにボタンsendBuddleを設定し,SecondActivityにデータを送信するとともにsecondインタフェースにジャンプする.キーリスニングコード:
class sendButtonListen implements OnClickListener{
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
String str = "dajia hao ";
intent.putExtra("send", str);
intent.setClass(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, 0);
}
}
2,SecondActivityのOnCreate関数でmainからのintentからのデータを受信する.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
okButton = (Button)findViewById(R.id.ok); // ok , main。
Intent intent = getIntent();
String getStr = intent.getStringExtra("send");
TextView tv = (TextView)findViewById(R.id.sendText);
tv.setText(getStr);
Toast.makeText(SecondActivity.this,
" MainActivity :"+getStr,
Toast.LENGTH_SHORT).show();
okButton.setOnClickListener(new okButtonListen());
}
3,SecondActivityでOkボタンの傍受を行い,押すとMainActivityに戻り,同時に自分で閉じてMainActivityにデータを送信する.OKボタンの傍受コードは以下の通りです.
class okButtonListen implements OnClickListener{
public void onClick(View v) {
// TODO Auto-generated method stub
Intent sendIntent = new Intent(SecondActivity.this, MainActivity.class);// , ! , , Inent
Bundle bundle = new Bundle();
bundle.putString("send", " ");
sendIntent.putExtras(bundle);
SecondActivity.this.setResult(RESULT_OK, sendIntent);
SecondActivity.this.finish();
}
4,mainに戻ると,mainはsecondからのデータを受信する.MainActivityでそのOnActivity Resultメソッドを複写します.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK){
Bundle bundle = data.getExtras();
String str = bundle.getString("send");
Toast.makeText(MainActivity.this,
" , activity :"+str,
Toast.LENGTH_SHORT).show();
}
}
注意:この中にはIntentを新設しないでください.onActivity Resultには3つのパラメータがあります.3つ目のパラメータはIntentです.彼をパラメータにすればいいだけです.