Android:onActivityResult()的范围?

时间:2016-05-15 10:37:18

标签: android android-intent android-activity scope

我在以下情况中发现了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()启动ConfirmActivityConfirmActivity将结果发送回RecipeFragment

setResult(RESULT_OK, returnIntent);

4。)RecipeFragment's onActivityResult()收到我期望的结果,但MainActivity's onActivityResult()收到的结果是我没有'期待。

基本上这没问题,但我想了解onActivityResult()的范围是什么。由于这个例子,很明显活动及其成员(如片段)共享范围。但是,非成员也会收到消息吗?如果有的话,限制在哪里?

1 个答案:

答案 0 :(得分:0)

此行为是仅与Fragment相关联的实施细节。从片段调用startActivityForResult()时,活动会记得稍后通知它。

在纯Android Activity中,此通知在dispatchActivityResult()内完成,因此,在调用活动本身onActivityResult()之前。所以你只会收到一次结果。

在支持FragmentActivity中,您会发现onActivityResult()的实现将结果传递给SupportFragment。为了找到这个片段,我会使用requestCode的高16位,这就是为什么你找到IllegalArgumentException

  

只能使用低16位的requestCode

有时在致电startActivityForResult()