我有一个问题,从拥有多个片段的1个活动中导航时应该使用什么。
目标是1个托管多个片段的活动。
我正在使用导航组件架构
我的目标是知道哪种是实现导航的最佳方法
当前实现的导航方式是
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)
}
我的问题是,这样在片段之间导航是一种好习惯吗?因为我感觉我在片段之间导航,却不关心Main容器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)
}
让1个活动托管一堆Fragments更好,还是第一种方法更好?
我认为我是在片段中托管片段的第一种方式,使我childFragmentManager
来获取这些片段的片段管理器。
这也使得从活动本身扩展某些方法变得更加困难。
谢谢
答案 0 :(得分:0)
您可以使用接口与两个片段中的closure
通信,并从.prototype
中进行片段事务。
答案 1 :(得分:0)
首先,您在两种方法中都执行相同的操作。从片段,活动或任何其他视图调用NavigationController
都会返回相同的NavigationController
。
第二, Navigation Component 的重点是将导航与其包含的Activity分开。实际上,所有片段的直接父对象都是您在 xml 中定义的NavHostFragment
。因此,活动与片段之间的导航无关。
第三个,无论是执行“第一方式”还是“第二方式”(从技术上讲,它们与我在第一点中提到的是相同的),而导航时并不意味着您将碎片托管在碎片中。每次您访问新目的地时,导航组件都会用新片段替换您的容器。
最后,最好坚持开发人员的建议。尝试阅读documentation,您不会在任何地方看到通过活动更改目的地的信息。