如何正确处理导航
How to handle navigation properly
我有一个问题,我应该使用什么从托管多个片段的 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)
}
让 1 activity 托管一堆 Fragments 更好,还是第一种方式更好?
我认为我在片段中托管片段的第一种方式让我做 childFragmentManager
以获得这些片段的片段管理器。
并且也使得从 activity 本身扩展某些方法变得更加困难。
谢谢
您可以使用一个接口与来自两个片段的 MainActivity
进行通信,并从 MainActivity
进行片段交易。
首先,你在两种方法中做同样的事情。从片段调用 NavigationController
,activity 或任何其他视图(如果重要)将 return 与您相同 NavigationController
.
其次,导航组件的要点是将导航与其包含的Activity分开。事实上,您所有片段的直接父级是您在 xml 中定义的 NavHostFragment
。因此,activity 与片段之间的导航无关。
Third,无论做 "first way" 还是 "second way"(从技术上讲,它们与我在第一点中提到的相同)在导航时不会意味着您在片段中托管片段。相反,导航组件 会在您每次访问新目的地时用新片段替换您的容器。
最后,最好坚持开发人员的建议。尝试阅读 documentation,你看不到他们通过 Activity 改变目的地的任何地方。
我有一个问题,我应该使用什么从托管多个片段的 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)
}
让 1 activity 托管一堆 Fragments 更好,还是第一种方式更好?
我认为我在片段中托管片段的第一种方式让我做 childFragmentManager
以获得这些片段的片段管理器。
并且也使得从 activity 本身扩展某些方法变得更加困难。
谢谢
您可以使用一个接口与来自两个片段的 MainActivity
进行通信,并从 MainActivity
进行片段交易。
首先,你在两种方法中做同样的事情。从片段调用 NavigationController
,activity 或任何其他视图(如果重要)将 return 与您相同 NavigationController
.
其次,导航组件的要点是将导航与其包含的Activity分开。事实上,您所有片段的直接父级是您在 xml 中定义的 NavHostFragment
。因此,activity 与片段之间的导航无关。
Third,无论做 "first way" 还是 "second way"(从技术上讲,它们与我在第一点中提到的相同)在导航时不会意味着您在片段中托管片段。相反,导航组件 会在您每次访问新目的地时用新片段替换您的容器。
最后,最好坚持开发人员的建议。尝试阅读 documentation,你看不到他们通过 Activity 改变目的地的任何地方。