android - 如何在Android中将徽章添加到BottomNavigationView
问题描述
我想用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()
}
}
希望对你有帮助
推荐阅读
- ansible - 从多个服务器复制文件的 Ansible 脚本
- python - 在 Python 中清理 PDF 用户输入
- swift - Superview边缘的程序化自动布局约束
- python - python列表理解:从列表列表中的每个列表中列出多个项目
- laravel - 如何dd数据库中的值?
- swift - AWS S3 签名 UploadPart 标头的 Content-MD5
- algorithm - 如何创建具有此类属性的数据结构
- android - 使用 FirebaseRecyclerOption<> 时如何在 firebase 数据库中检索子数据的子数据?
- ruby-on-rails - ActiveRecord - 不能在 BETWEEN 语句中使用列名
- html - 不同状态Angular 6的文本颜色