【问题标题】:How to add badge to BottomNavigationView in Android如何在Android中将徽章添加到BottomNavigationView
【发布时间】:2019-04-22 10:27:36
【问题描述】:

我想使用BottomNavigationView 视图设置一些fragments

但我想将徽章带有文字的圆圈背景)设置为BottomNavigationView 的一项! 对于这项工作,我写了下面的代码。 在我的代码中,它是第一次工作。 但是当更新徽章文字时,则不显示徽章文字只显示圆形背景没有任何文字! 为什么更新徽章编号时隐藏文字计数?!

我的活动代码:

class MainActivity : AppCompatActivity() {

    private lateinit var disposable: Disposable

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

        bottomNavigationView.selectedItemId = R.id.tab

        disposable = RxBus.listen(RxEvent.EventAddPerson::class.java).subscribe {
            badgeBottomNavBar(it.personName.toInt())
        }
    }

    private fun setupNavigation() {
        val navController = Navigation.findNavController(this, R.id.mainNavigationFragment)
        //setupActionBarWithNavController(this, navController)
        NavigationUI.setupWithNavController(bottomNavigationView, navController)
    }

    override fun onSupportNavigateUp() = Navigation.findNavController(this, R.id.mainNavigationFragment).navigateUp()

    private fun badgeBottomNavBar(count: Int) {
        val bottomNavigationMenuView = bottomNavigationView.getChildAt(0) as BottomNavigationMenuView
        val v = bottomNavigationMenuView.getChildAt(2)
        val itemView = v as BottomNavigationItemView

        val view = LayoutInflater.from(this).inflate(R.layout.notification_test, itemView, true)
        val badgeText: TextView = view.findViewById(R.id.notificationsBadge)
        badgeText.text = count.toString()
    }

    override fun onDestroy() {
        super.onDestroy()
        if (!disposable.isDisposed) disposable.dispose()
    }
}

片段代码:

class NotificationDetails : Fragment() {

    override fun onCreateView(inflater: LayoutInflater,
                              container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {

        return inflater.inflate(R.layout.fragment_notification_details, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        arguments?.let {
            val passedArguments = NotificationDetailsArgs.fromBundle(it)
            notificationDetailsLabel.text = passedArguments.notificationId
        }

        notificationDetailsLabel.setOnClickListener {
            RxBus.publish(RxEvent.EventAddPerson(editText.text.toString()))
        }
    }
}

我该如何解决?

【问题讨论】:

    标签: android bottomnavigationview badge


    【解决方案1】:

    朋友,你的问题很简单!
    您使用带有 locally 变量的 bottomNavBar 选项!
    首先你应该全局初始化这个变量,然后使用它!

    如以下代码:

    class MainActivity : AppCompatActivity() {
    
        private lateinit var disposable: Disposable
        private lateinit var bottomNavigationMenuView: BottomNavigationMenuView
        private lateinit var itemView: BottomNavigationItemView
        private lateinit var view: View
        private lateinit var badgeText: TextView
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.main_activity)
            setupNavigation()
    
            bottomNavigationView.selectedItemId = R.id.tab5
    
            bottomNavigationMenuView = bottomNavigationView.getChildAt(0) as BottomNavigationMenuView
            val v = bottomNavigationMenuView.getChildAt(2)
            itemView = v as BottomNavigationItemView
    
            view = LayoutInflater.from(this).inflate(R.layout.notification_test, itemView, true)
            badgeText = view.findViewById(R.id.notificationsBadge)
    
            //Set badge
            badgeBottomNavBar("15")
    
            disposable = RxBus.listen(RxEvent.EventAddPerson::class.java).subscribe {
                badgeBottomNavBar(it.personName)
            }
        }
    
        private fun setupNavigation() {
            val navController = Navigation.findNavController(this, R.id.mainNavigationFragment)
            NavigationUI.setupWithNavController(bottomNavigationView, navController)
        }
    
        override fun onSupportNavigateUp() = Navigation.findNavController(this, R.id.mainNavigationFragment).navigateUp()
    
        private fun badgeBottomNavBar(count: String) {
            badgeText.text = count
        }
    
        override fun onDestroy() {
            super.onDestroy()
            if (!disposable.isDisposed) disposable.dispose()
        }
    }
    

    希望对你有帮助

    【讨论】:

    • 谢谢我的朋友。你的答案是帮助我
    猜你喜欢
    • 1970-01-01
    • 2019-08-15
    • 2017-06-24
    • 2019-08-31
    • 2019-02-25
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多