Как добавить значок в BottomNavigationView в 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()))
        }
    }
}

Как я могу это исправить?

0
0
486
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()
    }
}

Я надеюсь помочь вам

Спасибо, мой друг. ваш ответ помогите мне <3

KokoBand 23.04.2019 07:22

Другие вопросы по теме