android - 如何正确处理导航
问题描述
我有一个问题,我应该使用什么来从 1 个托管多个片段的 Activity 导航。
目标是 1 个承载多个片段的 Activity。
我正在使用导航组件架构
我的目标是知道哪个是实现导航的最佳方式
当前实现的导航方式是这样的
class MainMenuActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main_menu)
}
override fun onSupportNavigateUp() = findNavController(R.id.nav_host_fragment).navigateUp()
}
然后在膨胀默认片段后在片段之间导航是这样的(从片段 A 到片段 B
Fragment A : Fragment() {
onViewCreated(...){
btn.setOnClickListener{
findNavController.navigate(R.id.nextAction)
}
从片段 B 到片段 C
Fragment B : Fragment() {
onViewCreated(...){
btn.setOnClickListener{
findNavController.navigate(R.id.nextAction)
}
我的问题是,以这种方式在片段之间导航是否是一种好习惯?因为我觉得我在片段之间进行导航,但不关心主容器 Activity。
我想做的是这样的
class MainMenuActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main_menu)
}
override fun onSupportNavigateUp() = findNavController(R.id.nav_host_fragment).navigateUp()
fun navigateToFragment(id:Int){
findNavController.navigate(id)
}
}
然后从每个片段中调用它以到达所需的目的地
Fragment A : Fragment() {
onViewCreated(...){
btn.setOnClickListener{
requireActivity().navigateToFragment(R.id.nextAction)
}
拥有一个托管一堆片段的活动是否更好,还是第一种方式更好?
这样做是我认为我在片段中托管片段的第一种方式,这使我childFragmentManager
能够获得这些片段的片段管理器。
并且也使得从活动本身扩展一些方法变得更加困难。
谢谢
解决方案
首先,您在两种方法中都在做同样的事情。NavigationController
如果重要,从片段、活动或任何其他视图调用将返回相同的结果NavigationController
。
其次,导航组件的重点是将导航与其包含的活动分开。事实上,所有片段的直接父级都是您在xmlNavHostFragment
中定义的。因此,活动与在片段之间导航无关。
第三,在导航时无论是“第一种方式”还是“第二种方式”(从技术上讲,它们与我在第一点中提到的相同)并不意味着您在片段中托管片段。相反,导航组件会在您每次访问新目的地时用新片段替换您的容器。
最后,最好坚持开发人员的建议。尝试阅读文档,您看不到他们通过 Activity 更改目的地的任何地方。
推荐阅读
- linux - 使用使用 clone() 创建的线程时,线程本地存储不起作用
- javascript - 如何在 HTML/JavaScript 中轻松处理 JSON 重定向?
- python-3.x - 这两种解决 leetcode 873 的算法在时间和空间复杂度上有什么区别?
- node.js - 如何在 knex 的 where 子句中使用值数组?
- python-3.x - 最小化成本函数时带有 scipy.optimize 的 TypeError
- php - 打印发票数据空白php foreach循环错误
- go - 将文件复制到文件夹中,直到达到一定大小
- mmc - 使用 mmc.exe 拒绝访问
- java - 异常:发布运行应用程序时的 ClassNotFoundException 和 NoClassDefFoundError
- r - 如何在 Rtsne 图中对我的样本进行颜色编码