首页 > 解决方案 > 使用 NavController 时如何使用 newInstance() 创建片段?

问题描述

NavController我正在创建一个使用和片段来显示每个屏幕的单活动应用程序。

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

onCreate()my 的方法中MainActivity,我有:

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)方法的类 - 打算将它用于三个网站菜单项。

我已经阅读了导航文档,但我不确定如何拦截/控制 NavController 以使用VisitWebsiteFragment.newInstance(...).

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

标签: androidandroid-navigation

解决方案


菜单项的 IDnav_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>

推荐阅读