android - 底部导航 GONE
问题描述
我在主活动中创建了一个底部导航,但是,我想让它在片段中消失。我怎样才能让我的底部导航消失?
班级主要活动
class MainActivity : AppCompatActivity() {
private val controlador by lazy {
findNavController(R.id.pokemons_activity_nav_host)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
configNavControler()
}
private fun configNavControler() {
val navView: BottomNavigationView = findViewById(R.id.main_activity_bottom_navigation)
val navHostFragment = supportFragmentManager
.findFragmentById(R.id.pokemons_activity_nav_host) as NavHostFragment
val navController = navHostFragment.navController
navView.setupWithNavController(navController)
}
}
我希望底部导航不出现的片段类
class EntradaFragment : Fragment() {
private val controlador by lazy {
findNavController()
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(
R.layout.entrada,
container,
false
)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
botao_entrar.setOnClickListener {
val direcao = EntradaFragmentDirections.acaoEntradaParaListaPokemons()
controlador.navigate(direcao)
}
}
}
解决方案
该topDestinationIds
属性包含您的主要片段的 ID。当导航改变时,导航控制器的监听器被调用,在那里你改变了底部导航视图的可见性。
class MainActivity : AppCompatActivity() {
private val controlador by lazy {
findNavController(R.id.pokemons_activity_nav_host)
}
private val topDestinationIds = setOf(
R.id.firstFragment,
R.id.secondFragment,
R.id.thirdFragment
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
configNavControler()
}
private fun configNavControler() {
val navView: BottomNavigationView = findViewById(R.id.main_activity_bottom_navigation)
val navHostFragment = supportFragmentManager
.findFragmentById(R.id.pokemons_activity_nav_host) as NavHostFragment
val navController = navHostFragment.navController
navView.setupWithNavController(navController)
navController.addOnDestinationChangedListener { _, destination, _ ->
if (destination.id !in topDestinationIds) {
navView.visibility = View.GONE
} else {
navView.visibility = View.VISIBLE
}
}
}
}
推荐阅读
- javascript - 为什么我的数组在 fetch 块之外没有值?
- google-cloud-platform - 在 Cloud Composer 中查询 DAG 触发器
- c - 'var = &Binary[0][0][0][0]' 在 C 中是什么意思?
- c# - JsonConvert 在序列化中不包括未设置的数字成员
- c - C 使用 sscanf 将 URL 参数 GET/POST 解析为 JSON
- javascript - Vanilla JS 中的图像轮播
- javascript - 使用 Karma / Jasmine for Router 的 Angular 单元测试错误
- r - 如何将基因探针ID与R中数据框中的基因符号匹配
- javascript - 从对象的键中获取最大值
- linux - 批量运行带有传递值的 shell 脚本