java - Java Android Badge Drawable 在配置更改后无法正常工作
问题描述
我有一个底部导航视图,带有一个显示新聊天的可绘制徽章。
此徽章在 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);
}
解决方案
我设法解决此问题的一种方法是在需要可见/隐藏时创建/删除徽章。在你的情况下,这样的事情应该有效:
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 中。
推荐阅读
- python - 在 python 中使用类型时“类已定义”
- python - 如何绘制和注释分组条形图
- python - 有什么方法可以在张量流中重新缩放和堆叠具有不同形状的特征图?
- javascript - 按布尔值过滤对象列表并选择对象键的最简单方法?
- parsing - 为什么 1*2+3 被解析为 1*(2+3) 即使没有声明运算符优先级或关联性?
- javascript - 如何在循环内创建不同的行
- python - Pandas:按多个分隔符对列进行排序和拆分
- python - 使用 reportlab 从 svg2rlg 中删除“星号”
- sql-server - 在单独的列上连接
- r - corrplot 边距太大(尽管有 mar 设置)