0

我有两个活动,一个父活动和一个子活动,但子活动也由另一个活动触发。现在,我只想在从该父活动触发子活动时将此子活动的结果返回给父活动。

有什么方法可以让孩子找到调用者活动(以便它只为该调用者活动进行一些计算)。有什么办法可以避免这种情况:

intent.putExtra("caller", "MainActivity");
startActivity(intent);

我要这个:

if (ParentActivity)
{  //do something and finish() }
if (AnotherActivity)
{  //do something more and finish() }
4

1 回答 1

0

是的,您可以通过使用您选择作为处理结果的父活动的startActivityForResult()来做到这一点。

启动一项您希望在完成后获得结果的活动。当此活动退出时,您的 onActivityResult() 方法将使用给定的 requestCode 调用。使用否定的 requestCode 与调用 startActivity(Intent) 相同(该活动不作为子活动启动)。

基本上在 Parent 活动中,您可以执行以下操作:

Intent intent = ...
startActivityForResult(intent, SOME_UNIQUE_INT_CODE);

然后你必须定义一个方法来处理结果,即onActivityResult()

protected void onActivityResult(int requestCode, int resultCode,
             Intent data) {
         if (requestCode == SOME_UNIQUE_INT_CODE) {
              // do something
         }
     }

在子活动中,您可以使用setResult()设置结果。此方法有两种变体,其中一种使您可以传入一些数据。

请阅读文档以了解有关如何使用它的更多信息。

编辑:

您可以使用:来自被调用活动的getCallingActivity()来查找哪个是父活动,但只有在您使用 startActivityForResult 时才有效。

返回调用此活动的活动的名称。这就是将 setResult() 中的数据发送给谁。您可以使用此信息来验证是否允许接收者接收数据。

注意:如果调用活动不期望结果(即它没有使用包含请求代码的 startActivityForResult(Intent, int) 形式),那么调用包将为空。

于 2012-10-20T14:28:49.540 回答