25

就像我可以使用这个将数据从一个活动发送到另一个活动:

intent.putExtra("Name", Value);

当我finish()用来返回上一个活动时,我如何发送数据。

在我的应用程序中,Activity_A我要去Activity_B。在Activity_B我在地图上标记一个位置,这给了我纬度和经度。然后我想用这个 lat 和 lng in Activity_A。但我不想重新Activity_A使用意图,因为我不想重新创建,Activity_A因为一些已经填充的数据将会丢失。

4

4 回答 4

33

当您使用intent.putExtra("Name", Value);时,在完成活动的同时也使用相同的东西。

例如:

从活动A,您调用活动B,例如:

intent.putExtra("Name", Value);
now instead of startActivity() use `startActivityForResult()`

并从活动B,在完成活动时,调用:

setResult(RESULT_OK);

现在在activityA中,你onActivityResult会被调用,就像:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
}

因此,您可以通过这种方式处理它。

于 2012-09-06T06:13:42.167 回答
25

在活动 A 中:

// Add more, if you call different activities from Activity A
private static final REQUEST_GET_MAP_LOCATION = 0;

void doSomething() {
    ...
    startActivityForResult(theIntentYouUseToStartActivityB, REQUEST_GET_MAP_LOCATION);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_GET_MAP_LOCATION && resultCode == Activity.RESULT_OK) {
        int latitude = data.getIntExtra("latitude", 0);
        int longitude = data.getIntExtra("longitude", 0);
        // do something with B's return values
    }
}

在活动 B 中:

...
setResult(Activity.RESULT_OK, 
    new Intent().putExtra("latitude", latitude).putExtra("longitude", longitude));
finish();
...
于 2012-09-06T06:19:09.583 回答
9

用, 从你Activity_B的:startActivityForResult()Activity_A

 //Starting a new Intent
 Intent nextScreen = new Intent(getApplicationContext(), Activity_B.class);
 // starting new activity
 startActivityForResult(nextScreen,1000);

完成工作后Activity_B,调用setResult()设置数据,然后finish()像这样

 //Starting the previous Intent
 Intent previousScreen = new Intent(getApplicationContext(), Activity_A.class);
 //Sending the data to Activity_A 
 previousScreen.putExtra("Bla"," Blabla"); 
 setResult(1000, previousScreen);
 finish();

这将使您回到以前的Activity_A.

Activity_A,覆盖onActivityResult()

 @Override  
  protected void onActivityResult(int requestCode, int resultCode, Intent data)     
  {
     super.onActivityResult(requestCode, resultCode, data);
     String bla = data.getStringExtra("Bla");       
  }

在这里找到

于 2014-07-07T16:20:43.337 回答
1

用于在 B 和 B之前startActivityForResult启动 B 并在A 中处理setResultfinishonAcitivityResult

于 2012-09-06T06:10:19.300 回答