首页 > 解决方案 > 底部导航 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)
    }
  }
}

标签: androidkotlinbottomnavigationview

解决方案


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
        }
    }

  }
}

推荐阅读