2012-04-19 299 views
2

执行我有两个活动,我们姑且称之为A和B.呼叫完成()不停止的代码

A是可以从应用程序两个地启动一项活动。我希望能够知道是否是从地方1或2开始,所以在BI所说的这样的:

Intent i = new Intent(B.this, A.class); 
i.putExtra("code", code); 
startActivityForResult(i, code); 

code是一个值为1的int)

在OnCreate AI的方法做到这一点:

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    Intent i = getIntent(); 
    Bundle extras = i.getExtras(); 
    if(extras != null) 
    { 
     int code = extras.getInt("code"); 
     if(code == 1) 
     { 
      ClearReleasesCache(); // just a private method of A 
      setResult(1, i);     
      finish(); 
      return; 
     } 
    } 

    // do everything else as usual 
    setContentView... 
} 

现在,问题是这样的(我在调试注意到了这一点):

当我推出一个由B,我想给完成,如代码所示。当我从另一个不是B的活动启动A时,我希望它像往常一样运行(并且它)。但是finish()return在这里什么都不做 - 我可以看到在调用返回调用之后,它跳回到onCreate,它不关闭活动。

也就是说,B中的onActivityResult()永远不会被调用。

这里有什么问题?

+0

@sandy在他的回答中的说法很有道理。也许你应该将检查移动到onStart()方法? – 2012-04-19 13:27:18

+0

“return”不可能“在这里什么也不做”。 – CommonsWare 2012-04-19 13:39:43

回答

0
if(extras == null || extras.getInt("code") != 1) { 
     // do everything else as usual 
} else 
     finish(); 

不能你只是切换if条件?

编辑:但你确定返回语句不工作吗?

+0

我做到了这一点,并以某种方式工作。干杯。 – eightx2 2012-04-21 18:59:49

0

您还可以在finish()后添加return,statement。

1

怎么能创造..它被一次完成当前执行完毕前完成..不是所有的在中间的东西突然......这是有道理的太..

0

尝试设置此setResult(RESULT_OK, i);,我有一个类似的问题,当我通过一个resultCode不同于RESULT_OK,并在这种情况下onActivityResult()从未被称为

0

你看起来正确 - 你检查你的父Activity看看它是否可能重新启动无额外活动?

您也可以稍微调整逻辑修复:

Intent i = getIntent(); 
Bundle extras = i.getExtras(); 
if(extras != null && extras.getInt("code") == 1) { 
    ClearReleasesCache(); // just a private method of A 
    setResult(1, i);     
    finish(); 
    return; 
} else { 

    // do everything else as usual 
    setContentView... 
} 

但是,如果从父你的逻辑(呼叫)Actvity是incorrent你将很可能得到相同的结果。