首页 > 解决方案 > 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);

        }

标签: javaandroidvisibilitybadgeonconfigurationchanged

解决方案


我设法解决此问题的一种方法是在需要可见/隐藏时创建/删除徽章。在你的情况下,这样的事情应该有效:

 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 中。


推荐阅读