Android 如何使用finish发回数据?
我可以使用以下方法将数据从一个活动发送到另一个活动:Android 如何使用finish发回数据?,android,android-intent,Android,Android Intent,我可以使用以下方法将数据从一个活动发送到另一个活动: intent.putExtra("Name", Value); 使用finish()返回上一个活动时,如何发送数据 在我的应用程序中,从Activity\u A我将进入Activity\u B。在Activity_B中,我在地图上标出了一个位置,这给了我纬度和经度。然后我想在活动\u A中使用此lat和lng。但我不想使用意图回到活动A,因为我不想重新创建活动\u A,因为已经填充的一些数据将丢失。使用startractivityforre
intent.putExtra("Name", Value);
使用finish()
返回上一个活动时,如何发送数据
在我的应用程序中,从
Activity\u A
我将进入Activity\u B
。在Activity_B
中,我在地图上标出了一个位置,这给了我纬度和经度。然后我想在活动\u A
中使用此lat和lng。但我不想使用意图回到活动A
,因为我不想重新创建活动\u A
,因为已经填充的一些数据将丢失。使用startractivityforresult
在Bfinish
之前启动B和setResult
,并在A中处理onAcitivityResult
,就像您使用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
}
因此,您可以通过这种方式处理它。在活动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();
...
使用startActivityForResult()
从您的活动\u A
调用您的活动\u B
:
//Starting a new Intent
Intent nextScreen = new Intent(getApplicationContext(), Activity_B.class);
// starting new activity
startActivityForResult(nextScreen,1000);
完成活动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();
这将使您回到以前的活动\u A
在Activity\u A
中,覆盖onActivityResult()
找到将值保存在全局变量中或使用共享前缀。如果使用全局变量有问题。如果我像这样使用它,活动。当我在Activity_A中时,转到Activity_B并返回Activity_A,使用home按钮关闭应用程序,并在5分钟后重新打开,我收到空指针异常,因为,包含此变量的Activity_B已被销毁,您可以引用此链接。。。这肯定会对你有所帮助…你可以使用共享首选项查看答案:[在这里输入链接描述][1][1]:所以我保留意图。putExtra(“lat”,lat);然后设置结果(1,意图);然后finish()?在onACtivityResult中,data.getDoubleExtra(“lat”);但还有一件事。如果我在活动_B中按back按钮会怎么样?我是否应该覆盖活动_B中的onBackPress()并说ResultCode=0??如果在Activity上没有发送任何内容,android是否需要或会注意最后如果您想禁用back按钮,您可以。。出于同样的原因,在activityB中,检查ActivityResult内部是否有正确的请求和结果代码。所以,若用户按下“后退”按钮,结果代码将有所不同。我有一个例子,其中,Activity_a调用Activity_B,inturn调用Activity_C和finish();。。。现在,如果我在活动_C上调用finish(),我将进入活动_A,但在这里的OnActivityResult中,它并没有进入您给出的if块。这是意料之中的,因为从活动B到活动C,我只是在使用startActivity(intent)。如何解决这个案子??感谢you@Archie.bpgc:当您在B中调用Activity_C时,在调用finish
之前是否setResult
?不,除了Intent(Activity_B,Activity_C)、startActivity(Intent)和finish(),我没有使用任何东西;但我随后改变了startActivityForResult(意图,0);我认为setResult在活动_B中没有用处,因为我这里没有lat,lng值,它们在活动_C中,而且当从活动_C返回到活动_A时,我不会通过活动_B,因为它已完成
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
String bla = data.getStringExtra("Bla");
}