android - onActivityResult为什么不执行?

 mobiledu2502881683 发布于 2022-10-31 21:58

Activity A:

int tag  = 0;
startActivityForResult(new Intent(getApplication(), LoreAddActivity.class).putExtra("tag1", tag), 100);

@Override
protected void onActivityResult(int arg0, int arg1, Intent arg2) {
    super.onActivityResult(arg0, arg1, arg2);
    if(arg1==RESULT_OK){
        switch (arg0) {
        case 100:
            tag2 = arg2.getIntExtra("tag2", 0);
            break;
        default:
            break;
        }
    }
}

Activity B:

int tag = getIntent().getIntExtra("tag1",0);

Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putInt("tag2", tag);
intent.putExtras(bundle);
setResult(RESULT_OK, intent);
finish();
4 个回答
  • startActivityForResult(new Intent(getApplication(), LoreAddActivity.class).putExtra("tag1", tag), 100);

    这一句使用的是 getApplication,Activity 的启动默认使用 standard 模式,使用这种模式启动的 Activity 会默认进入启动它的 Activity 的任务栈中,而 getApplication 方法获得的 Context 并不包含任务栈信息。所以启动 Activity 的时候最好不要使用 getApplication,换成 Activity 的 Context 吧。

    2022-10-31 23:16 回答
  • 两个activity 的启动模式你设置的是什么

    2022-10-31 23:16 回答
  • 只要是返回Activity A,onActivityResult就会执行。你可以用Log或debug确认一下onActivityResult中哪里没有执行

    2022-10-31 23:16 回答
  • 有可能是intent 里面出错了。 尝试下new Intent(XXX.this,LoreAddActivity.class);

    getApplication() though its referring to Application object but the
    Application class extends Context class, so it can be used to offer
    application context.

    getApplication返回的application对象也继承了context,所以你可以这样用。但是如果没有明确指定来源,那么当接收回调即setResult的时候,B 是不知道这个intent来自哪里的。以上是我的理解,仅供参考,如有错误请指出

    2022-10-31 23:16 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有