Android 正在调用错误活动中的onActivityResult
基本上:活动A调用startActivityForResult,启动活动B。此时,活动B应调用活动A的onActivityResult方法。相反,活动B然后错误地调用活动C的onActivityResult方法。请注意,活动B.getCallingActivity()按预期返回活动A 更详细的信息: 我有三项活动:Android 正在调用错误活动中的onActivityResult,android,android-intent,android-activity,Android,Android Intent,Android Activity,基本上:活动A调用startActivityForResult,启动活动B。此时,活动B应调用活动A的onActivityResult方法。相反,活动B然后错误地调用活动C的onActivityResult方法。请注意,活动B.getCallingActivity()按预期返回活动A 更详细的信息: 我有三项活动: EditModuleActivity(活动A) 编辑活动(活动B) 配置活动(活动C) 在EditModuleActivity(活动A)中,我有以下代码: private voi
- EditModuleActivity(活动A)
- 编辑活动(活动B)
- 配置活动(活动C)
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?");
}
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();
}
在EditMotorActivity(活动B)中,我有以下代码:
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?");
}
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();
}
配置活动(活动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,但实际情况并非如此
问题
- 为什么会调用错误的OnActivity结果
- 如何调用右onActivityResult?我的期望不正确吗?这还有什么用
- 如果打错了电话,我怎么打正确的
- 我的代码与此处接受的答案相同:
- 我的清单中没有android:launchMode=“singleInstance”
- 我不知道“碎片”是什么,但我想我没有
- 注意,我不是从一个活动中调用两个不同的活动,就像在这个问题中:相反,我是从两个不同的活动中调用相同的活动
- 这里有一条评论说:“如果你从A类调用活动B,它将始终向A类返回代码,如果你从C类调用D,则返回代码相同。”但我从活动B调用活动B,它将返回活动C。为什么
B
/ \
A C
不是这个:
X Z
\ /
Y
好的-很可能代码中引用了错误的“上下文”,或者静态引用了某个活动或其他奇怪的东西 要直接回答您的问题,请执行以下操作:
onNewIntent
我是这样重写onStop方法的:
@Override
public void onStop(){
setResult(RESULT_CANCELED, new Intent());
finish();
}
基本上,我不理解Android生命周期是如何工作的。我认为onStop()只会在某个活动被终止时被调用,如果它正在等待另一个活动的响应,我认为它不会被终止
发生的事情是这样的:
活动C启动了活动A,后者启动了活动B。当活动B启动时,调用了A.onStop()。然后,当活动B完成时,它(正确地)尝试返回到活动A,但活动A已经停止,因此它一路返回到活动C。如果其他人有类似问题(当
startActivityForResult()
返回到错误的活动,而不是调用它的活动时),看看这个如果你能1)按“a调用B调用C”的顺序重新标记你的活动,那会有帮助-现在,听起来像是“a调用C调用B”,这让人困惑2)如果你能从笔记中澄清“如果你从a类调用活动B”是什么意思-是“a类”还是“活动a”-因为“类”调用一个不属于活动的活动是很奇怪的,可能会解释您的结果,3)发布您的实际代码,而不是转述版本-您可能有一个错误,即使您认为它是一个准确的表示,在您的转述中也不明显。。。可能会删除不相关的行,但仍然…感谢您的回复!1.我重新贴了标签。请注意,B从不调用C。A调用B,C调用B,但B从不调用C.2。澄清-所有活动都会调用其他活动。3.我无法发布原始代码:(主要是我希望有人能确认我对应该发生的事情的理解是正确的。你如何初始化上下文谢谢你!这非常有用。你给了我至少三个全新的想法。我将编写一个简化版的问题,以隔离问题,并在稍后发布所有代码。)今天。好吧……于是我拿出相关的代码,重新创建了这个问题的迷你版,但这个版本起了作用。于是我添加了大量的指纹,撕了大约一天的头发,然后突然它开始起作用。在它开始起作用后,我没有时间四处挖掘,所以我不是100%确定,但我认为我发现了问题。(我接受了我自己的答案,尽管这感觉有点糟糕…)再次感谢你的帮助!