使用来自另一个Activity的附加数据返回MainActivity

时间:2014-06-11 14:39:02

标签: android android-intent android-activity onresume

我知道如何将活动中的数据发送到Next Activity:[Intent.putExtra(key, value);]。

我也知道如何从活动返回到前一个活动并包含数据:[see this stackoverflow answer]。

但我想知道的是,我如何返回主页活动并包含数据。举个例子:

  1. 我在活动A中启动应用程序并执行一些操作
  2. 然后我去活动B做一些事情
  3. 然后我去活动C做一些事情
  4. 然后我想回到活动A(做不同的事情)
  5. 在第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,所以我只是使用广播将我上次活动的一个意图发送到我的HomeActivity ..

    将测试它以查看它是否有效。虽然当我参加另一项活动时,我有点怀疑它。 (我的HomeActivity已经是一个BroadcastReceiver,用于我必须发送的一些Http请求,并且需要结果,当然是AsyncTasks。)

    好吧,当我还没有进入MainActvity时,这不起作用。所以欢迎更多的建议..

3 个答案:

答案 0 :(得分:2)

好的,我找到了一个解决方案(也感谢关于onNewIntent的shimi_tab's answerBudius comment):

在我的活动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
    }
}

答案 1 :(得分:1)

将数据放回调用活动,您将使用此方法:

public final void setResult (int resultCode, Intent data)

根据此意图,您可以随意填写所需的所有数据。 活动结果方法如下:

protected void onActivityResult (int requestCode, int resultCode, Intent data)

这样就是你在结果上提供的数据。

答案 2 :(得分:1)

你应该开展活动" A"少说。 致电活动" A"再次使用标志FLAG_ACTIVITY_CLEAR_TOP的新意图。

Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

您需要的所有数据。

你不应该在ActivityResult上转发你想要做的事情。