android - 使用 NavController 时如何使用 newInstance() 创建 fragment ?

标签 android android-navigation

我正在创建一个单 Activity 应用程序,它使用 NavController 和 fragment 来显示每个屏幕。

该应用程序有一个主屏幕,并在抽屉导航中包含其他三个菜单项,以便用户可以在外部浏览器中访问不同的网站。

在我的 MainActivityonCreate() 方法中,我有:

mDrawerLayout = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
        R.id.nav_home,
        R.id.nav_visit_website_1,
        R.id.nav_visit_website_2,
        R.id.nav_visit_website_3)
        .setDrawerLayout(mDrawerLayout)
        .build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);

我创建了一个 VisitWebsiteFragment 类,它具有静态 newInstance(String websiteUrl) 方法 - 旨在将其用于三个网站菜单项。

我已通读 navigation documentation ,但我不确定如何拦截/控制 NavController 以便使用 VisitWebsiteFragment.newInstance(...) 创建三个 fragment 实例。

我可能完全忽略了导航的某些方面。有人能指出我正确的方向吗?

最佳答案

菜单项的 ID 为 nav_visit_website_1nav_visit_website_2nav_visit_website_3

将此代码添加到我的 nav_graph.xml 中可以满足我的需要:

<fragment
    android:id="@+id/visit_website"
    android:name="org.example.VisitWebsiteFragment"
    android:label="@string/visit_website" />

<action
    android:id="@+id/nav_visit_website_1"
    app:destination="@id/visit_website">
    <argument
        android:name="url"
        app:argType="string"
        android:defaultValue="https://example.com/website1" />
</action>

<action
    android:id="@+id/nav_visit_website_2"
    app:destination="@id/visit_website">
    <argument
        android:name="url"
        app:argType="string"
        android:defaultValue="https://example.com/website2" />
</action>

<action
    android:id="@+id/nav_visit_website_3"
    app:destination="@id/visit_website">
    <argument
        android:name="url"
        app:argType="string"
        android:defaultValue="https://example.com/website3" />
</action>

关于android - 使用 NavController 时如何使用 newInstance() 创建 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61484218/

相关文章:

android - 如何在运行时设置 Activity 的父 Activity ?

Android 导航 Controller 错误 `no current navigation code`

android - 带有导航组件的 BottomNavigationView - 选定的 fragment 未显示

android - 如何在此代码上为 FragmentTransaction 设置自定义动画

android - 如何通过 NFC 打开应用程序并在同一操作中传递嵌入数据?

android - Rx 和改造 : Changing ServiceApi request parameter in request loop started by repeatwhen or repeatuntill

Android 完全强制退出应用程序

android - 如何使用studio在android中设置环境变量以激活uiautomatorviewer

Android - ActionBarSherlock - 设置菜单中文本的文本颜色

android - 在android导航组件中添加进入动画开始目的地