我知道如何将活动数据发送到Next Activity
:[Intent.putExtra(key, value);
]。
我也知道如何从活动返回到前一个活动并包含数据:[see this stackoverflow answer]。
但我想知道的是,我如何返回Home Activity并包含数据。举个例子:
在步骤4中,我想在onResume(或其它方法返回)中执行与正常情况不同的操作,因此我包含的数据是带有键的布尔值(最好使用intent.putExtra("myKey", true);
(如果出现故障则为false))。在onResume我然后做类似的事情:
@Override
protected void onResume(){
super.onResume();
if(intent.getExtras() != null && intent.getAction().toString().equals("myKey")){
if(intent.getExtras().getBoolean("myKey")){
// do something else (step 4) on success
}
else{
// do something else (step 4) on fail
}
}
else{
// Do regular stuff I normally do in the onResume()
}
}
好吧,我想我已经解决了我的问题。我的HomeActivity已经是一个BroadcastReceiver,所以我只是使用广播从我上一个Activity发送一个intent到我的HomeActivity ..
将测试这个以查看它是否有效。虽然当我参加另一项活动时,我有点怀疑它。 (我的HomeActivity已经是一个BroadcastReceiver,用于我必须发送的一些Http请求,并且需要结果,当然是AsyncTasks。)
好的,当我还没有进入MainActvity时,这不起作用。所以欢迎更多的建议..
好的,我找到了一个解决方案(也感谢shimi_tab's answer和Budius comment关于onNewIntent):
在我的活动C中,当我想要返回时:
Intent home = new Intent(this, A.class);
home.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
home.putExtra("myKey", true);
startActivity(home);
在我的活动A中:
// This allows us to use getIntent to get the latest intent, instead of the first Intent used in the onCreate
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
@Override
protected void onResume(){
super.onResume();
if(getIntent().getExtras() != null && getIntent().getExtras().getBoolean("myKey")){
// Do something else after returning from C
}
else{
// Do regular things on a normal onResume (like back from B or Settings)
}
}
注意(对原始问题微不足道):在我的情况下,我在我的活动A中使用Google服务,我在googleApiClient.onConnect();
方法中使用了onStart()
。所以,我还必须在onConnected()
方法中添加以下内容:
@Override
public void onConnected(Bundle b){
Bundle extras = getIntent().getExtras();
if(extras == null || (extras != null && !extras.getBoolean("myKey"))){
// Do regular stuff
}
else{
// Do something else after we returned from C
}
}
要将数据放回调用活动,您将使用此方法:
public final void setResult (int resultCode, Intent data)
根据这个意图,您可以随意填写所需的所有数据。活动结果方法如下:
protected void onActivityResult (int requestCode, int resultCode, Intent data)
这与您在结果上输入的数据相同。
你应该减少活动“A”状态。再次使用标志FLAG_ACTIVITY_CLEAR_TOP调用具有新意图的活动“A”。
Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
以及您想要的所有数据。
您不应该依赖活动结果来完成您的工作。