问题描述
Activity A:
int tag = 0;startActivityForResult(new Intent(getApplication(), LoreAddActivity.class).putExtra('tag1', tag), 100);@Overrideprotected 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();
问题解答
回答1:有可能是intent 里面出错了。 尝试下new Intent(XXX.this,LoreAddActivity.class);
getApplication() though its referring to Application object but theApplication class extends Context class, so it can be used to offerapplication context.
getApplication返回的application对象也继承了context,所以你可以这样用。但是如果没有明确指定来源,那么当接收回调即setResult的时候,B 是不知道这个intent来自哪里的。以上是我的理解,仅供参考,如有错误请指出
回答2:只要是返回Activity A,onActivityResult就会执行。你可以用Log或debug确认一下onActivityResult中哪里没有执行
回答3:两个activity 的启动模式你设置的是什么
回答4:startActivityForResult(new Intent(getApplication(), LoreAddActivity.class).putExtra('tag1', tag), 100);
这一句使用的是 getApplication,Activity 的启动默认使用 standard 模式,使用这种模式启动的 Activity 会默认进入启动它的 Activity 的任务栈中,而 getApplication 方法获得的 Context 并不包含任务栈信息。所以启动 Activity 的时候最好不要使用 getApplication,换成 Activity 的 Context 吧。