У меня есть методы, которые показывают значки на некоторых элементах моего bottomNavigtionView
. Вот оно:
private fun addBadgeView() {
val menuView = mainNavigationView.getChildAt(0) as BottomNavigationMenuView
val itemView = menuView.getChildAt(1) as BottomNavigationItemView
val notificationBadge = LayoutInflater.from(this).inflate(R.layout.notification_badge, menuView, false)
val textView = notificationBadge.findViewById<TextView>(R.id.counter_badge)
val itemView1 = menuView.getChildAt(2) as BottomNavigationItemView
val notificationBadgeOne = LayoutInflater.from(this).inflate(R.layout.notification_badge, menuView, false)
val textView1 = notificationBadgeOne.findViewById<TextView>(R.id.counter_badge)
val itemView2 = menuView.getChildAt(3) as BottomNavigationItemView
val notificationBadge2 = LayoutInflater.from(this).inflate(R.layout.notification_badge, menuView, false)
val textView2 = notificationBadge2.findViewById<TextView>(R.id.counter_badge)
when {
sp!!.getInt("notepad_count", 0) > 99 -> textView2.text = resources.getText(R.string.more90)
sp!!.getInt("notepad_count", 0) < 99 -> textView2.text = sp!!.getInt("notepad_count", 0).toString()
sp!!.getInt("notepad_count", 0) == 0 -> textView2.visibility = View.GONE
}
if (sp!!.getString("new_receivedM", "")!!.isNotEmpty()) {
when {
Integer.parseInt(sp!!.getString("new_receivedM", "")!!) > 99 -> textView.text = resources.getText(R.string.more90)
sp!!.getString("new_receivedM", "") == "0" -> textView.visibility = View.GONE
else -> textView.text = sp!!.getString("new_receivedM", "")
}
} else run { textView.visibility = View.GONE }
if (sp!!.getString("all_jobs", "")!!.isNotEmpty()) {
when {
Integer.parseInt(sp!!.getString("all_jobs", "")!!) > 99 -> textView1.text = resources.getText(R.string.more90)
sp!!.getString("all_jobs", "") == "0" -> textView1.visibility = View.GONE
else -> textView1.text = sp!!.getString("all_jobs", "")
}
} else {
textView1.visibility = View.GONE
}
itemView.addView(notificationBadge)
itemView1.addView(notificationBadgeOne)
itemView2.addView(notificationBadge2)
}
, но иногда я хотел бы удалить некоторые элементы при некоторых условиях, поэтому я добавил здесь небольшое условие:
val set = sp!!.getStringSet("disabled_app_modules", HashSet<String>())
if (set!!.isNotEmpty()) {
val list: ArrayList<String> = ArrayList()
list.addAll(set)
for (i in 0 until list.size) {
when (list[i].substring(1, list[i].length - 1)) {
"notepad" -> {
bottomNavigationView.menu.removeItem(R.id.notespec)
}
}
}
}
, и я проверяю, есть ли у меня bottomNavigationView
содержит следующие элементы:
if (bottomNavigationView.getChildAt(2) != null) {
val itemView1 = menuView.getChildAt(2) as BottomNavigationItemView
val notificationBadgeOne = LayoutInflater.from(this).inflate(R.layout.notification_badge, menuView, false)
val textView1 = notificationBadgeOne.findViewById<TextView>(R.id.counter_badge)
if (sp!!.getString("all_jobs", "")!!.isNotEmpty()) {
when {
Integer.parseInt(sp!!.getString("all_jobs", "")!!) > 99 -> textView1.text = resources.getText(R.string.more90)
sp!!.getString("all_jobs", "") == "0" -> textView1.visibility = View.GONE
else -> textView1.text = sp!!.getString("all_jobs", "")
}
} else {
textView1.visibility = View.GONE
}
itemView1.addView(notificationBadgeOne)
}
и в результате я не вижу значок, потому что элемент null
, но он видим и доступен для нажатия. Может быть, я где-то допустил некоторые ошибки?
ОБНОВЛЕНИЕ
Я понял, где допустил ошибку:
if (bottomNavigationView.getChildAt(2) != null)
эта строка всегда будет нулевой. Поэтому я удалил это условие, но у меня есть ошибка:
kotlin.TypeCastException: null cannot be cast to non-null type com.google.android.material.bottomnavigation.BottomNavigationItemView
, которая указывает на эту строку:
itemView2.addView(notificationBadge2)
, как я понимаю, я звоню удаленному элементу. Но я не знаю, как проверить, удален ли предмет или нет. Может кто знает как это сделать?