我有两个活动,我们称之为A和B.
A是可以从应用中的两个位置开始的活动。我希望能够知道A是从1号还是2号开始,所以在B中我称之为A:
Intent i = new Intent(B.this, A.class);
i.putExtra("code", code);
startActivityForResult(i, code);
(code
是一个值为1的int。)
在A的onCreate方法中,我这样做:
@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发布A时,我希望A 完成,如此处的代码所示。当我从另一个不是B的活动中启动A时,我希望它像往常一样运行(并且确实如此)。但是finish()
和return
在这里什么都不做 - 我可以看到在回调之后调试它时,它会跳回到onCreate,它不会关闭活动。
也就是说,B中的onActivityResult()
永远不会被调用。
这里有什么问题?
答案 0 :(得分:1)
如何才能在创建之前完成..一旦当前执行完成就会完成..不是突然出现在某些事物的中间......而且它也有意义......
答案 1 :(得分:0)
if(extras == null || extras.getInt("code") != 1) {
// do everything else as usual
} else
finish();
你不能切换if条件吗?
编辑:但你确定return语句没有问题吗?
答案 2 :(得分:0)
你也可以在finish()之后添加一个return语句。
答案 3 :(得分:0)
尝试设置此setResult(RESULT_OK, i);
,当我将resultCode传递给RESULT_OK时,我遇到了类似的问题,在这种情况下,onActivityResult()从未被调用
答案 4 :(得分:0)
你看起来是正确的 - 你有没有检查你的父活动,看看它是否可以重新启动活动与空的额外?
您还可以稍微调整逻辑以进行修复:
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的逻辑是不正确的,那么你很可能得到相同的结果。