onActivityResult方法没有被调用

7

我在我的安卓应用程序中遇到了问题。当从操作栏中的“向上导航”按钮按下时,'onActivityResult'方法没有被调用,我不知道为什么。我认为我已经做得很好:

  • 父活动使用“startActivityForResult”方法启动子活动。
  • Intent intent = new Intent(ParentActivity.this, ChildActivity.class);
    startActivityForResult(intent, 1000);
    
  • 父活动已经覆盖了'onActivityResult'方法。
  • protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
       super.onActivityResult(requestCode, resultCode, data);   
       if (data != null && requestCode == 1000)
       {
            Bundle extras = data.getExtras();
            Boolean rc = extras.getBoolean(MyConstants.INTENT_EXTRA_RESULT);
            if (rc)
            {
                .......
            }
        }
    }
    

  • 子活动已经覆盖了'onOptionsItemSelected'并调用了'NavUtils.navigateUpFromSameTask'。
  • public boolean onOptionsItemSelected(MenuItem item)
      {
        if (item.getItemId() == android.R.id.home)
        {
            Intent result = new Intent((String)null);
            result.putExtra(MyConstants.INTENT_EXTRA_RESULT, true);
            setResult(RESULT_OK, result);
            NavUtils.navigateUpFromSameTask(this);          
            return true;
        }           
        else
        {
            return super.onOptionsItemSelected(item);
        }
    }
    

  • 子活动已覆盖'finish'方法。这个方法设置了一个结果。
  • public void finish() 
    {
       Intent result = new Intent((String)null);
       result.putExtra(Constantes.INTENT_EXTRA_HAY_QUE_RECALCULAR, hayQueRecalcular);               
       setResult(RESULT_OK, result);
    
       super.finish();
    }   
    

    我不确定为什么'onActivityResult'方法没有被调用。

    我观察到的是,当从操作栏中按下“向上导航”按钮时,子活动没有完成(“完成”方法没有被调用)。 但是当按下后退按钮(硬件按钮)时,它就会被调用。

    我做错了什么?

    谢谢


    在使用startActivityForResult(Intent,int)时,您提供的请求代码是什么?它是一个正整数吗? - Gopal Gopi
    检查您的父活动的启动模式。请参见此处 - https://dev59.com/Puo6XIcBkEYKwwoYTSwu#6002384 - ranjk89
    是的,它是一个正整数(1000)。 - Eduardo
    我还没有定义父活动的启动模式。 - Eduardo
    请发布启动活动并处理活动结果的代码。 - Andrew Fielden
    我已经发布了你要求我的代码。 - Eduardo
    1个回答

    5
    由于您的子活动位于父活动的顶部,因此无需使用此方法。
     NavUtils.navigateUpFromSameTask(this);    
    

    写作技巧

    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            Intent result = new Intent((String) null);
            result.putExtra(MyConstants.INTENT_EXTRA_RESULT, true);
            setResult(RESULT_OK, result);
            finish();
            return true;
        } else {
            return super.onOptionsItemSelected(item);
        }
    }
    

    在按下Home键时结束您的子Activity。

    1
    感谢您的帮助。但我不明白 'navigateUpFromSameTask method' 的作用是什么。我认为它是用于导航到父活动的。Android文档说:“当用户按下应用程序图标时导航到上一个界面,您可以使用NavUtils类的静态方法navigateUpFromSameTask()。当您调用此方法时,它会完成当前活动并启动(或恢复)适当的父活动。” - Eduardo
    1
    谢谢,现在可以工作了,但我仍然不明白为什么“NavUtils.navigateUpFromSameTask(this)”不能结束子活动。 - Eduardo
    @Eduardo 我不确定 NavUtils 的行为。我认为它直接从任务中移除 Activity。 - Gopal Gopi
    如果您有第二个子活动,该怎么办?您如何将结果发送给父级? - desgraci

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接