我有一个比较器屏幕,它是一个片段,分为2个子屏幕。在使用导航组件之前,我可以轻松地:
private void initializeFragments() {
FoodComparatorFragment comparatorFragment1 = new FoodComparatorFragment();
FoodComparatorFragment comparatorFragment2 = new FoodComparatorFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.comparator_fragment_1, comparatorFragment1);
transaction.add(R.id.comparator_fragment_2, comparatorFragment2);
transaction.commit();
}
但是,我不知道如何在不显式使用FragmentManager
的情况下使用导航组件执行此操作。
1条答案
按热度按时间u3r8eeie1#
默认情况下,导航组件有一个
NavHostFragment
,由一个活动/多个片段模型的主活动托管。对于多活动/片段模型,每个活动都有自己的NavHostFragment/NavGraph
。在这里,我们将考虑一个活动,许多片段模型,其中一个片段是比较器屏幕(父片段),它被分成2个子屏幕/片段。
但是
NavHostFragment
一次只能承载一个片段;所以这里的想法是在比较器/父片段中有两个NavHostFragments
。考虑以下示例:
MainActivity
,它托管两个片段(HomeFragment
,ParentFragment
)。ParentFragment
是具有两个NavHostFragments
的比较器,每个可以托管单个片段;上面的是TopFragment
,下面的是BottomFragment
。HomeFragment
转到ParentFragment
的操作int
参数发送到每个子屏幕,顶部/底部片段,通过将参数发送到子屏幕沿着从HomeFragment
到ParentFragment
的操作来完成;它们将显示在屏幕上的TextViews
上。现在我们有3个NavGraph:
Main(mobile_navigation.xml):
在
ParentFragment
中,另外两个NavGraphs
,每个子屏幕:对于第一个子屏幕(top_navigation.xml):
对于第二子屏幕(bottom_navigation. xml):
布局:
activity_main.xml
fragment_parent.xml
fragment_top/bottom. xml非常简单
fragment_top.xml:
顶部和底部片段的
NavGraph
将以编程方式设置,以便允许将参数从主NavGraph
传递到子屏幕的NavGraphs
。现在,在
HomeFragment
中,有一个按钮可以转到ParentFragment
,其中包含NavGraph
中定义的操作,该操作发送两个子屏幕所需的参数:然后用
SafeArgs
接收ParentFragment
上的参数:再次在目标顶部/底部子屏幕上,使用
safeArgs
获取参数,并将其设置为TextView
: