如何在Android中添加徽章到底部导航视图



我想使用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()))
        }
    }
}

我该如何解决它?

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

希望对您有所帮助

最新更新