我在以下情况中发现了onActivityResult()
的意外行为:
1。)MainActivity采用onActivityResult()
方法并添加RecipeFragment
。
Fragment fragment = new RecipeFragment(recipeBo);
getSupportFragmentManager()
.beginTransaction()
.add(R.id.fragment_container, fragment, FragmentTag.RECIPE.toString())
.addToBackStack(FragmentTag.RECIPE.toString())
.commit();
2。)RecipeFragment采用onActivityResult()
方法并启动RecipeEditMenuPopupActivity
。
Intent intent = new Intent(getActivity(), RecipeEditMenuPopupActivity.class);
startActivityForResult(intent, RequestCode.MENU_RECIPEMODIFICATION_POPUP.ordinal());
3。)RecipeEditMenuPopupActivity()
启动ConfirmActivity
,ConfirmActivity
将结果发送回RecipeFragment
。
setResult(RESULT_OK, returnIntent);
4。)RecipeFragment's
onActivityResult()
收到我期望的结果,但MainActivity's
onActivityResult()
收到的结果是我没有'期待。
基本上这没问题,但我想了解onActivityResult()
的范围是什么。由于这个例子,很明显活动及其成员(如片段)共享范围。但是,非成员也会收到消息吗?如果有的话,限制在哪里?
答案 0 :(得分:0)
此行为是仅与Fragment
相关联的实施细节。从片段调用startActivityForResult()
时,活动会记得稍后通知它。
在纯Android Activity
中,此通知在dispatchActivityResult()
内完成,因此,在调用活动本身onActivityResult()
之前。所以你只会收到一次结果。
在支持FragmentActivity
中,您会发现onActivityResult()
的实现将结果传递给SupportFragment
。为了找到这个片段,我会使用requestCode
的高16位,这就是为什么你找到IllegalArgumentException
只能使用低16位的requestCode
有时在致电startActivityForResult()
。