我需要根据情况以编程方式设置导航图的开始目标。 我有Fragment0,还有Fragment1,Fragment2,... FragmentN都扩展了Fragment0,并且所有这些(包括Fragment0)都可以成为希望的起始目的地。
我已经知道NavGraph中的方法叫做
setStartDestination(R.id.nav_fragment_X);
但是对我没有用,因为如果我没有记错的话,它需要在xml导航文件中声明所有这些fragment0 ... N节点。
所以,我想在xml文件中只有一个片段节点,并能够以编程方式设置Class(在我的情况下为片段),在正常情况下,您可以通过设计来指示android studio的/ text标签,并且显示如下:
android:name="com.android.fragments.FragmentX"
我终于得到答案了:
首先,您可以通过执行以下操作来获取startDestination图:
NavDestination startDestNode = navGraph.findNode(R.id.start_dest);
然后,您可以通过使用以下内容来更新类名:
((FragmentNavigator.Destination) startDestNode).setClassName("Class name you wish");
最后,类FragmentNavigator.Destination的方法setClassName(String className)]允许您指示将与目标关联显示的片段类。