【问题标题】:BottomNavigation GONE底部导航 GONE
【发布时间】:2021-04-10 03:16:18
【问题描述】:

我在主活动中创建了一个底部导航,但是,我想让它在片段中消失。如何让我的底部导航消失?

类主活动

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

【问题讨论】:

    标签: android kotlin bottomnavigationview


    【解决方案1】:

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

    【讨论】:

    • 我在“主要活动”中添加了这段代码,但它并没有消除可见性。我应该改变什么来消除可见性?我必须在“Entrada Fragment”上工作吗?
    • 您是否准确粘贴了此代码?您必须将那些假的topDestinationIds 替换为EntradaFragment 的ID,该ID 在您的导航图中定义。我不知道你的代码是什么样的,所以我不能说你必须做什么,但这里是documentation about this
    • 我放了“R.id.entrada_graph”,这是我的 nav_graph xml 片段的 id。不知道对不对
    • 您应该在 XML 文件中放置片段的 id (yourFragmentId),而不是导航图 id。
    【解决方案2】:

    首先从您的片段中访问您的BottommNavigationView,如下所示:

    var nav = getActivity().findViewById(R.id.main_activity_bottom_navigation)
    

    然后你可以像这样隐藏它:

    nav.visibility = View.GONE
    

    【讨论】:

    • 你在“Entrada Fragment”中发布的第一部分?我不能在那里应用这个
    • 您有几种可能的解决方案来做到这一点。您可以创建回调,可以在显示片段之前隐藏底部导航视图等。
    猜你喜欢
    • 2018-10-04
    • 1970-01-01
    • 2020-02-07
    • 2020-12-28
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多