【发布时间】:2020-12-08 18:02:57
【问题描述】:
我有一个围绕 CoordinatorLayout 中片段容器的 Activity 布局。切换目的地时,如果当前显示任何一个,我想隐藏 FAB 并关闭 SnackBar,如果需要,让目的地 Fragment 在其onViewCreated() 中重新显示 FAB。这与 Material Design 指南一致,即当您切换目的地时,FAB 应该明显消失并重新出现。
所以我这样做了:
navController.addOnDestinationChangedListener { _, navDestination, _ ->
binding.floatingActionButton.apply {
hide()
setOnClickListener(null)
}
currentSnackbar?.dismiss()
//...
}
但是,当 DialogFragment 是导航目的地时,前一个 Fragment 在返回时不会再次调用 onViewCreated(),因为它从未离开过屏幕。
NavDestination 似乎没有任何方法可以检查它是否代表 DialogFragment,即使 XML 区分 fragment 和 dialog。
我意识到我可以将 FAB 显示代码移动到片段中的 onResume,但是在仅打开警报对话框时首先隐藏它看起来很愚蠢。我意识到我也可以创建一个将其隐藏在onStop() 中的父 Fragment 类,但我尽量避免创建类层次结构层以使代码不那么脆弱(通过继承组合),并且我也想避免重复所有代码在应用程序上。
【问题讨论】:
标签: android android-architecture-navigation