如何使用完成发回数据?

时间:2012-09-06 06:06:26

标签: android android-intent

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

intent.putExtra("Name", Value);

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

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

4 个答案:

答案 0 :(得分:27)

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

例如:

从activityA你可以调用activityB,如:

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

从activityB开始,在完成活动时,请致电:

setResult(RESULT_OK);

现在在activityA中,您的onActivityResult将被调用,如:

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

所以你可以这样处理它。

答案 1 :(得分:19)

在活动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();
...

答案 2 :(得分:6)

使用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");       
  }

找到here

答案 3 :(得分:1)

使用startActivityForResult在B setResult之前启动B和finish并在A

中处理onAcitivityResult