如何在Android中为BottomNavigationView添加徽章

问题描述 投票:0回答:1

我想使用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个回答
1
投票

你的问题很简单我的朋友! 你使用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()
    }
}

我希望能帮助你

© www.soinside.com 2019 - 2024. All rights reserved.