Android NavigationUI startDestination class(不是 ID)以编程方式

Android NavigationUI startDestination class (not ID) programmatically

我需要根据条件以编程方式设置导航图的起始目的地我有 Fragment0,还有 Fragment1、Fragment2、... FragmentN 都扩展了 Fragment0,并且所有这些(包括 Fragment0)都能够成为希望的起始目的地

我已经知道 NavGraph 中有一个名为

的方法
setStartDestination(R.id.nav_fragment_X);

但这对我没有用,因为如果我没记错的话,它需要在 xml 中声明所有这些 fragment0...N 个节点导航文件。

所以,我想要的是在 xml 文件中只有一个片段节点,并且能够以编程方式设置 Class(一个片段在我的情况下)在正常情况下,您可以通过 android 工作室的 design/text 选项卡进行指示,并显示如下:

    android:name="com.android.fragments.FragmentX"

终于找到答案了:

首先你得到你的 startDestination 图,例如,执行:

NavDestination startDestNode = navGraph.findNode(R.id.start_dest);

稍后,您通过使用以下命令更新 class 名称:

((FragmentNavigator.Destination) startDestNode).setClassName("Class name you wish");

综上所述,setClassName(String className) 方法 class FragmentNavigator.Destination 允许您指示将显示的与目的地关联的片段 class。