android - 使用 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(...)
.
我可能完全缺少导航的某些方面。有人能指出我正确的方向吗?
解决方案
菜单项的 IDnav_visit_website_1
是nav_visit_website_2
和nav_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>
推荐阅读
- macos - 如何在 MacOS 上创建和运行 SikuliX 脚本?
- android - OkHttp 证书固定错误或默认行为?
- excel - 在主工作簿中复制范围和更新工作表
- scala - Spark:找不到 java.util.UUID 的编码器
- clojure - 在 Clojure 中获得意想不到的序列实现
- memory-management - 作业分配的核心是我在 SLURM 上请求的两倍
- python - 具有固定键、值类型的不可变/冻结字典子类
- pandas - 如何使用 tabula-py 将 PDF 转换为 excel 到几个表的数据框?
- java - 作为顺序搜索的一部分,使用 math.random 在两个整数之间创建一个数组
- r - 在 data.table 中添加缺失的观察值