[英]Return to MainActivity with added data from another Activity
我知道如何将数据从活动发送到Next Activity
:[ Intent.putExtra(key, value);
]。
我也知道如何从一个活动返回到上一个活动,并包括数据:[ 请参见stackoverflow答案 ]。
但是,我想知道的是如何返回家庭作业并包含数据。 举个例子:
在第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发送到我的HomeActivity。
将对此进行测试以查看其是否有效。
虽然我有点怀疑当我参加另一项活动时会否。
(我的HomeActivity已经是我必须发送的一些Http请求的广播接收器,并且需要它的结果,它们当然是AsyncTasks。)
好的,当我不在MainActvity中时,这将不起作用。 因此欢迎更多建议。
好的,我找到了一个解决方案(也要感谢shimi_tab的回答和Budius对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)
}
}
注意(与原始问题googleApiClient.onConnect();
):在我的情况下,我在活动A中使用了Google Services,其中我有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);
以及您想要的所有数据。
您不应该在ActivityResult上进行中继。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.