Я хочу использовать 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()
}
}
Я надеюсь помочь вам
Спасибо, мой друг. ваш ответ помогите мне <3