基本上:活动A调用startActivityForResult,它启动活动B.此时,活动B应该回调活动A的onActivityResult方法。相反,活动B然后错误地回调活动C的onActivityResult方法。请注意,Activity B.getCallingActivity()按预期返回活动A.
更详细:
我有三项活动:
EditModuleActivity(活动A)
EditMotorActivity(活动B)
ConfigurationActivity(活动C)
在EditModuleActivity(活动A)中,我有以下代码:
private void launchIntentFromHere(){
int requestCode = 101;
Intent editMotorIntent = new Intent(context, EditMotorActivity.class);
editMotorIntent.putExtra(EditMotorActivity.EDIT_MOTOR_CONTROLLER, item);
editMotorIntent.putExtra("requestCode", requestCode);
setResult(RESULT_OK, editMotorIntent);
startActivityForResult(editMotorIntent, requestCode);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
DbgLog.error("*************************** why is this never getting called?");
}
在EditMotorActivity(活动B)中,我有以下代码:
private void doThisThing(Object item){
// blah blah build intent
DbgLog.error("calling activity: " + getCallingActivity().toString()); // this prints out Activity A, which is what I expect.
returnIntent.putExtra(EDIT_MOTOR_CONTROLLER, item);
setResult(RESULT_OK, returnIntent);
finish();
}
ConfigurationActivity(活动C)中包含:
private void launchIntent(Object item){
Intent editMotorIntent = new Intent(context, EditMotorActivity.class);
editMotorIntent.putExtra(EditMotorActivity.EDIT_MOTOR_CONTROLLER, item);
setResult(RESULT_OK, editMotorIntent);
startActivityForResult(editMotorIntent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// deals properly with the results
}
当我在EditModuleActivity中并启动EditMotorActivity时,会调用 ConfigurationActivity.onActivityResult 。相反,当我在EditModuleActivity中并且我启动EditMotorActivity时,应该调用EditModuleActivity.onActivityResult但是没有发生。
问题
为什么onActivityResult被调用错误?
如何在onActivityResult上调用权限?我的期望不正确吗?这还有什么用呢?
如果错误的一个被调用,我该如何调用正确的?
答案我见过没有帮助
我的代码与此处接受的答案相同:onActivityResult() not being called in activity
我的Manifest中没有android:launchMode="singleInstance"
我不知道"片段"但我不认为我有这个。
请注意,我没有在一个活动中调用两个不同的活动,如此问题所示:Handling onActivityResult in Android app having more than one activity相反,我正在从两个不同的活动中调用SAME活动。
这里的评论说"如果你从A班打电话给活动B,它总是会将代码返回给A班。如果你从C拨打D,那就相同。"但我从活动B调用活动B并返回活动C.为什么? WRONG onActivityResult() being called
像这样:
B
/ \
A C
不是这个:
X Z
\ /
Y
答案 0 :(得分:3)
我正在覆盖onStop方法:
@Override
public void onStop(){
setResult(RESULT_CANCELED, new Intent());
finish();
}
基本上,我并不了解Android Lifecycle的工作原理。我认为onStop()只会在一个Activity被杀死时被调用,我认为如果等待来自另一个Activity的响应它就不会被杀死。
所发生的事情是这样的: 活动C启动了活动A,它启动了活动B.当活动B启动时,调用了A.onStop()。然后,当活动B完成时,它(正确)尝试返回活动A,但活动A已经停止,因此它一直返回活动C.
答案 1 :(得分:1)
好的 - 很可能你引用了错误的“上下文”或对活动的静态引用或代码中其他地方的奇怪内容。
直接回答你的问题:
您的代码无法解释原因 - 如果可能,您需要发布更多代码。
您的期望是正确的。您似乎清楚地了解startActivityForResult
的工作原理。您的参考资料也证明您知道自己在做什么。它没有“工作”任何其他方式......但这并不意味着你没有错误(见上面的“1”!)
如果您无法弄清楚出了什么问题,那么您可以随时调用您想要的活动(startActivity)传递您想要的意图,然后处理该意图。如果您在极少数情况下仍然得到奇怪的结果,您可能想要研究onNewIntent
...
答案 2 :(得分:1)
如果其他人有类似的问题(当startActivityForResult()
返回错误的活动时,而不是调用它的那个),请看一下solution