1

2 つのアクティビティ (ActivityAActivityB) を作成しましたが、それらを切り替えたいと考えています。

  • ユーザーが のボタンをクリックするとActivityAActivityB
  • ではActivityB、ユーザーはメッセージを挿入し、ボタンを押すことでActivityA

しかし、 から届いたメッセージを取得できませんActivityB

以下に私のコードを説明します。

開始が必要ActivityB(からActivityAまでActivityB)

Intent intent = new Intent(this, ActivityB.class);
startActivity(intent);

開始が必要ActivityA(からActivityBまでActivityA)

Intent intent = new Intent(this, ActivityA.class);
String message = "some text";
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);

問題

次のように、インテントを処理するコードをどこに配置すればよいActivityAですか?

Intent intent = getIntent();
String message = intent.getStringExtra(ActivityB.EXTRA_MESSAGE);

onResume()andメソッドで取得できないためonRestart()、アクティビティ ライフサイクルの処理で明らかに何かが欠けています。

さらに、 をコールバックするたびにActivityA、メソッドがコールバックされますonCreate()。つまり、毎回アクティビティが破棄されます。これは、私が望むものではありません。

前もって感謝します。

4

2 に答える 2

1

以下のコードを使用して、ActivityA から ActivityB を呼び出します。

   Intent intent = new Intent(this, ActivityB.class);
    startActivityForResult(intent,0); // '0' is requestcode

ユーザーが以下のコードを使用して ActivityB からメッセージを返すときに入力します。

 Intent intent = new Intent();
    Bundle b = new Bundle();
    b.putString("messagekey",your_message);
    intent.putExtras(b);
    setResult(1,intent); // here '1' is resultcode
    finish();

次のように、ActivityA の OnActivityResult メソッドをオーバーライドします。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0 && resultCode == 1)
{
if (data != null) {
if (data.getStringExtra("messagekey") != null) {
String message_from_activityB = data.getStringExtra("messagekey");
}
}
}
}
于 2013-08-16T10:34:30.677 に答える