从 Activity 的 2 静态片段中获取 Activity 的 1 Intent extras

Get Activity's 1 Intent extras from Activity's 2 static fragment

我有以下场景。我使用 Intent 从 SelectRecipeActivityRecipeStepsActivity。为此,我使用捆绑包来传递食谱成分和步骤。 RecipeStepsActivity 托管一个静态片段 (RecipeStepsFragment),其中显示了食谱的成分和步骤。我的问题是将意图包传递给 RecipeStepsFragment 的最佳做法是什么?

现在我在 RecipeStepsFragmentonCreateView() 中使用 getActivity().getIntent().getExtras()SelectRecipeActivity 中获取意图的额外内容并且它没有问题。

因为它不是动态片段(我不使用片段构造函数或 newInstance 方法,它是在 xml 中使用 <fragment> 标记声明的)并且片段事务没有进行地方,我不能使用片段参数传递额外内容,我知道这是推荐的方法。或者我可以吗?我错过了什么吗?谢谢!!

好的,我假设你只是指 "static" 在 xml 中定义的片段,而不是静态变量(这对片段来说是一件非常糟糕的事情)。在这种情况下 - 给片段一个 id,在 Activity 的 onCreate 中使用 findFragmentById,将其转换为正确的片段类型,然后调用片段上的函数以将适当的数据传递给它。

根据@Gabe Sechan 的建议,我使用以下方式将包从 RecipeStepsActivity 传递到 RecipeStepsFragment

1) 我收到了从 SelectRecipeActivityRecipeStepsActivityonCreate 方法的额外意图。

2) 在 RecipeStepsActivityonCreate 方法中,我通过调用 findFragmentById 获得对 RecipeStepsFragment 的引用,如下所示:

RecipeStepsFragment stepsFragment = (RecipeStepsFragment)getSupportFragmentManager()
.findFragmentById(R.id.master_steps_fragment);

3) 然后我得到创建 Bundle 的 intent extras,然后我将其作为 RecipeStepsFragment 的参数传递,如下所示:

Bundle args = getIntent().getExtras();
//Pass the intent extras to the fragment using a bundle
if (args != null) {
   //show Dessert Name in Toolbar
   mRecipe = args.getParcelable(EXTRAS_RECIPE_ITEM);
   assert mRecipe != null;
   setTitle(mRecipe.getName());

   assert stepsFragment != null;
   stepsFragment.setArguments(args);
}

4) 现在在 RecipeStepsFragment 的 ->onActivityCreated<- 方法中(确保宿主 activity 已经创建,所以我们从之前的 activity),我只是简单地得到步骤的 3 个参数,如下所示:

Bundle fragmentArgs = getArguments();

其中包含传递给 RecipeStepsActivity 的相同额外内容 SelectRecipeActivity