改变活动之间的焦点

时间:2013-08-16 10:25:20

标签: android android-intent android-activity

我创建了两个活动(ActivityAActivityB),我想在它们之间切换,即:

  • 当用户点击ActivityA中的按钮时,我会转到ActivityB
  • ActivityB中,用户插入了一条消息,然后按下按钮,他转到ActivityA

但是,我无法检索从ActivityB到达的邮件。

我在下面描述了我的代码。

要求ActivityB开始(从ActivityAActivityB

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

要求ActivityA开始(从ActivityBActivityA

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()onRestart()方法中检索它,因此我在处理活动生命周期时显然遗漏了一些内容。

此外,每次我回调ActivityA时,它都会回调onCreate()方法,这意味着每次都会销毁活动,这不是我想要的。

提前致谢。

2 个答案:

答案 0 :(得分: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");
}
}
}
}

答案 1 :(得分:0)

你必须使用startActivityForResult而不是简单的StartActivity

类似这样的事情

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

在ActivityB中,这样做不要使用StartIntent

调用ActivityA
 Intent intent = getIntent();
 String message = "some text";
 intent.putExtra("EXTRA_MESSAGE", message);
 setResult(RESULT_OK,intent);
 finish();

 in ActivityA override the

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if(data.getExtras().containsKey("EXTRA_MESSAGE"))
      {
        // now you can access those data of ActivtyB
      }