【发布时间】:2013-08-29 13:23:52
【问题描述】:
我搜遍了,也有类似的帖子,但找不到解决办法!
我的情况是我有一个包含fragment 的活动 A,我想从该fragment 开始一个新的Activity B,它应该将一些值返回给fragment。
在fragment
startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE);
在ActivityB上,返回数据
Intent returnIntent = new Intent();
returnIntent.putExtra(SerializationConstants.isSearchSaved, mAbItemsShown.ordinal());
setResult (ConstantsUtils.SUCCESS_RETURN_CODE, returnIntent);
finish();
在片段上
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
switch (requestCode) {
case ConstantsUtils.TOMAP_REQUEST_CODE:
if (resultCode == ConstantsUtils.SUCCESS_RETURN_CODE) {
//do some stuff
}
}
}
fragment 中的onActivityResult 被成功调用,正确的requestCode 但resultCode 始终为0,intent 始终为null。
我在Activity A 下没有其他onActivityResult 实现。
事实上,我也尝试从 fragment 开始 activity
getActivity().startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE);
并在Activity A 上实现onActivityResult,但它发生相同,正确requestCode 但错误resultCode 和intent。
我使用的是Sherlock Action Bar,所以我的fragment 是SherlockListFragment,所以我使用的是support library (r18)。
你能帮帮我吗?谢谢
【问题讨论】:
-
我不知道你的
super.onActivityResult(requestCode, resultCode, intent);是干什么用的。在我看来,没有必要。此外,您的 request_code 必须 >= 0,因为它提到 [here][doc][doc]:developer.android.com/reference/android/app/…, int) -
super 不是必需的,我只是想看看问题是否是因为它,但如果我不说,结果相同。常量 SUCCESS_RETURN_CODE 的值为 1,但 Activity.RESULT_OK 也是如此
-
看起来您在 ActivityB 的其他地方调用
finish()。在不设置结果代码和结果数据的情况下调用finish()将导致您所描述的行为。无论是那个还是 ActivityB 崩溃,都会做同样的事情。 -
那么我必须建议你检查活动 A,在
onStart()或onResume部分。如果您创建一个名为startActivityForResult的片段的新实例,这将是问题所在。正常情况下,当Activity B调用finish()时,Android会自动恢复之前的状态。所以我你手动创建另一个片段实例,它将替换获得返回 Intent 的那个。
标签: android android-intent android-fragments onactivityresult