我有三个活动A,B和C.
A以startActivityForResult(getIntent(), ACTIVITY_B);
开始B,B以startActivityForResult(getIntent(), ACTIVITY_C);
开始C. ACTIVITY_B
和ACTIVITY_C
是各种活动中具有相同值的常量。
当C返回RESULT_OK时,B重新启动,代码为:
if (resultCode == Activity.RESULT_OK){
finish();
startActivityForResult(getIntent(), ACTIVITY_B);
}
这很好用。
当B必须返回时(点击菜单项),它会设置活动结果。
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch(item.getItemId()) {
case MENU_CONFIRM:
System.out.println("Setting Result to RESULT_OK");
setResult(Activity.RESULT_OK);
finish();
return true;
}
return super.onMenuItemSelected(featureId, item);
}
但是,我可以看到setResult(Activity.RESULT_OK);
被忽略,因为它始终在活动A(RESULT_CANCEL
)中作为onActivityResult
收到。我正在使用2.3。
任何线索?
答案 0 :(得分:0)
我很好奇你是如何处理你的Intents和Activity生命周期的。
从我在你的两篇文章中读到的内容:
现在,除非我缺少某些东西,否则活动B使用以下代码:
if (resultCode == Activity.RESULT_OK){
finish();
startActivityForResult(getIntent(), ACTIVITY_B);
}
开始吧?你能澄清一下吗?
<强>加成强>
我相信你是从B开始B所以当你在你的第二个B实例中调用setResult()和finish()时,你将返回第一个B活动。
如果您没有使用任何特殊的Intent标志,那么生命周期将是:
根据我的理解,你已将这个周期改为:
A开始B
...
答案 1 :(得分:0)
不要完成B并开始一个新的,A不会得到通知,因为它不是它打开的B. 相反,如果C需要在结束时返回B,请创建一个Intent,将结果值放在其上,并在B中检查此结果:
C:
Intent data = new Intent();
// Store values you want to return on the intent
setResult(RESULT_OK, data);
finish();
B:在onActivityResult
if (resultCode == Activity.RESULT_OK) {
// get values from the intent and change B accordingly
}