从子活动中查找呼叫者活动

时间:2012-10-20 14:23:10

标签: android android-activity

我有两个活动是父活动和子活动,但子活动也是由另一个活动触发的。现在,我希望仅在从此父活动触发子活动时才将此子活动的结果返回到父活动。

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

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

我想要这个:

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

1 个答案:

答案 0 :(得分:0)

是的,您可以使用您选择作为处理结果的父活动中的startActivityForResult()来执行此操作。

  

在完成后启动您想要结果的活动。   当此活动退出时,您的onActivityResult()方法将是   使用给定的requestCode调用。使用否定requestCode是   与调用startActivity(Intent)相同(活动未启动为   一项子活动)。

基本上在父活动中你可以这样做:

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)表单   请求代码),然后调用包将为null。