从 Activity 的 2 静态片段中获取 Activity 的 1 Intent extras
Get Activity's 1 Intent extras from Activity's 2 static fragment
我有以下场景。我使用 Intent 从 SelectRecipeActivity
到 RecipeStepsActivity
。为此,我使用捆绑包来传递食谱成分和步骤。 RecipeStepsActivity
托管一个静态片段 (RecipeStepsFragment
),其中显示了食谱的成分和步骤。我的问题是将意图包传递给 RecipeStepsFragment
的最佳做法是什么?
现在我在 RecipeStepsFragment
的 onCreateView()
中使用 getActivity().getIntent().getExtras()
从 SelectRecipeActivity
中获取意图的额外内容并且它没有问题。
因为它不是动态片段(我不使用片段构造函数或 newInstance 方法,它是在 xml 中使用 <fragment>
标记声明的)并且片段事务没有进行地方,我不能使用片段参数传递额外内容,我知道这是推荐的方法。或者我可以吗?我错过了什么吗?谢谢!!
好的,我假设你只是指 "static" 在 xml 中定义的片段,而不是静态变量(这对片段来说是一件非常糟糕的事情)。在这种情况下 - 给片段一个 id,在 Activity 的 onCreate 中使用 findFragmentById,将其转换为正确的片段类型,然后调用片段上的函数以将适当的数据传递给它。
根据@Gabe Sechan 的建议,我使用以下方式将包从 RecipeStepsActivity
传递到 RecipeStepsFragment
。
1) 我收到了从 SelectRecipeActivity
到 RecipeStepsActivity
的 onCreate
方法的额外意图。
2) 在 RecipeStepsActivity
的 onCreate
方法中,我通过调用 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
。
我有以下场景。我使用 Intent 从 SelectRecipeActivity
到 RecipeStepsActivity
。为此,我使用捆绑包来传递食谱成分和步骤。 RecipeStepsActivity
托管一个静态片段 (RecipeStepsFragment
),其中显示了食谱的成分和步骤。我的问题是将意图包传递给 RecipeStepsFragment
的最佳做法是什么?
现在我在 RecipeStepsFragment
的 onCreateView()
中使用 getActivity().getIntent().getExtras()
从 SelectRecipeActivity
中获取意图的额外内容并且它没有问题。
因为它不是动态片段(我不使用片段构造函数或 newInstance 方法,它是在 xml 中使用 <fragment>
标记声明的)并且片段事务没有进行地方,我不能使用片段参数传递额外内容,我知道这是推荐的方法。或者我可以吗?我错过了什么吗?谢谢!!
好的,我假设你只是指 "static" 在 xml 中定义的片段,而不是静态变量(这对片段来说是一件非常糟糕的事情)。在这种情况下 - 给片段一个 id,在 Activity 的 onCreate 中使用 findFragmentById,将其转换为正确的片段类型,然后调用片段上的函数以将适当的数据传递给它。
根据@Gabe Sechan 的建议,我使用以下方式将包从 RecipeStepsActivity
传递到 RecipeStepsFragment
。
1) 我收到了从 SelectRecipeActivity
到 RecipeStepsActivity
的 onCreate
方法的额外意图。
2) 在 RecipeStepsActivity
的 onCreate
方法中,我通过调用 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
。