使用NavController时如何使用newInstance()创建片段?

问题描述 投票:1回答:1

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

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

在我的onCreate()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)类-旨在将其用于三个网站菜单项。

我已经阅读了navigation documentation,但是我不确定如何用VisitWebsiteFragment.newInstance(...)创建三个片段实例来拦截/控制NavController。

可能在导航的某些方面我完全不见了。有人可以指出我正确的方向吗?

android android-navigation
1个回答
0
投票

菜单项的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>
© www.soinside.com 2019 - 2024. All rights reserved.