Android 正在调用错误活动中的onActivityResult

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

基本上:活动A调用startActivityForResult,启动活动B。此时,活动B应调用活动A的onActivityResult方法。相反,活动B然后错误地调用活动C的onActivityResult方法。请注意,活动B.getCallingActivity()按预期返回活动A

更详细的信息:

我有三项活动:

  • EditModuleActivity(活动A)

  • 编辑活动(活动B)

  • 配置活动(活动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?");
}
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

好的-很可能代码中引用了错误的“上下文”,或者静态引用了某个活动或其他奇怪的东西

要直接回答您的问题,请执行以下操作:

  • 你的代码没有解释为什么-你需要发布更多的代码。。。如果可能的话

  • 你的期望是正确的。您似乎清楚地了解了它的工作原理。你的推荐信也表明你知道自己在做什么。它不以任何其他方式“工作”。。。但这并不意味着你没有错误(见上面的“1”)

  • 如果您无法找出哪里出了问题,那么您可以始终显式调用您想要的活动(startActivity),传递您想要的意图,然后处理该意图。如果在极少数情况下仍然得到奇怪的结果,您可能需要研究
    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%确定,但我认为我发现了问题。(我接受了我自己的答案,尽管这感觉有点糟糕…)再次感谢你的帮助!