我有一个底部导航视图与徽章可绘制,显示新的聊天。
此徽章在我存储通知计数器的Firebase数据库的侦听器上更新。当此值更改时,徽章将更新。此外,如果计数器等于零,则徽章被设置为不可见。
一切正常,除非我使用设备设置更改了一些配置(例如语言或删除权限)。事实上,如果我这样做并返回到应用程序,活动会重新创建(有时不会破坏它),徽章也会重新加载。但setVisibility似乎不起作用。即使计数器是零,徽章也是可见的。当侦听器被触发时,Plus不再更新。代码运行正常,我检查了一些日志,看监听器是否被触发,以及包含setVisibility的代码行是否正在运行。它看起来只是有随机的行为。
如果活动被销毁并重新创建,它将正常工作。
任何帮助都将不胜感激!
这就是我初始化徽章的方式
bottomNav = findViewById(R.id.bottom_navigation);
badge_chat = bottomNav.getOrCreateBadge(R.id.nav_chat);
badge_chat.setVisible(false);这是监听器代码
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
int badge_counter = dataSnapshot.getValue(int.class);
boolean visibility;
if (badge_counter == 0) {
visibility = false;
} else {
visibility = true;
}
badge_chat.setNumber(badge_counter);
badge_chat.setVisible(visibility);
}发布于 2020-07-09 20:48:10
我设法解决这个问题的一种方法是在需要显示/隐藏的时候创建/删除徽章。在您的例子中,类似这样的东西应该可以工作:
if (badge_counter == 0) {
getBadge(R.id.nav_chat)?.isVisible = false
removeBadge(R.id.nav_chat)
} else {
getOrCreateBadge(R.id.nav_chat).apply{
isVisible = true
number = badge_counter
}
}注意:答案在Kotlin中。
https://stackoverflow.com/questions/62302910
复制相似问题