首页 > 解决方案 > 如何在 BottomNavigationView 中放置 2 个不同的片段?

问题描述

我尝试在我的主 Activity 中放置一个像这样的 BottomNavigationView,并且我也有一个回收器视图:

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        loadFragment(HomeFragment(this))

        //import the bottomNavigationView
        val navigationView = findViewById<BottomNavigationView>(R.id.barre_nav)
        navigationView.setOnNavigationItemSelectedListener {
            when(it.itemId) {
                R.id.nav_home -> {
                    loadFragment(HomeFragment(this))
                    return@setOnNavigationItemSelectedListener true
                }
                R.id.nav_choose -> {
                    loadFragment(ChooserFragment(ChooserActivity()))
                    return@setOnNavigationItemSelectedListener true
                }
                else -> false
            }
        }
    }

    private fun loadFragment(fragment: Fragment) {
        val transactionMuscle = supportFragmentManager.beginTransaction()
        transactionMuscle.replace(R.id.fragment_container, fragment)
        transactionMuscle.addToBackStack(null)
        transactionMuscle.commit()
    }

但是我对这段代码的问题是,如果我想将两个视图放在同一个容器中,但我不会,那就是:我有一个 ChooserActivity,我希望我的 bottomNavigationView 的第二部分重定向到这个页面,并且不是具有选择器组合的 MainActivity 片段。我会对主 Activity 做同样的事情,但使用 ChooserActivity。我不知道我是否清楚,但我提前谢谢你。

编辑澄清:我的目标是使用 mybottomNavigationView,当我们点击第一个按钮时,它会重定向到 MainActivity,当我们点击第二个按钮时,它会重定向到 ChooserActivity。这两个必须有自己的容器。希望它更好...

标签: androidkotlinbottomnavigationview

解决方案


解决方案 试试这段代码:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val bottomNavigation: BottomNavigationView = findViewById(R.id.barre_nav)
        bottomNavigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
    } //onCreate() end here

    private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
        when (item.itemId) {
            R.id.nav_home -> {

                val homeFragment = HomeFragment.newInstance()
                loadFragment(homeFragment)
                return@OnNavigationItemSelectedListener true
            }
            R.id.nav_choose -> {

                val chooserFragment = ChooserFragment.newInstance()
                loadFragment(chooserFragment)
                return@OnNavigationItemSelectedListener true
            }
        }
        false
    }

    private fun loadFragment(fragment: Fragment) {
        val transactionMuscle = supportFragmentManager.beginTransaction()
        transactionMuscle.replace(R.id.fragment_container, fragment)
        transactionMuscle.addToBackStack(null)
        transactionMuscle.commit()
    }

在您的 Fragments OnCreateView() 方法中也添加这些行:

1.HomeFragment

companion object {
        fun newInstance(): HomeFragment = HomeFragment()
    }

2.ChooserFragment

companion object {
        fun newInstance(): ChooserFragment= ChooserFragment()
    }

希望它有效:)

如果您仍然遇到任何问题,请将其添加到评论中


推荐阅读