Java Android Badge Drawable 在配置更改后无法正常工作

Posted

技术标签:

【中文标题】Java Android Badge Drawable 在配置更改后无法正常工作【英文标题】:Java Android Badge Drawable not working properly after configuration change 【发布时间】:2020-09-29 19:54:09 【问题描述】:

我有一个底部导航视图,带有一个可绘制的徽章,显示新聊天。

此徽章在 Firebase 数据库的侦听器上更新,我在其中存储通知计数器。当此值更改时,徽章会更新。此外,如果计数器为零,则将徽章设置为不可见。

一切正常,除非我使用设备设置更改某些配置(例如语言或删除权限)。事实上,如果我这样做并返回应用程序,则会重新创建活动(有时不会破坏它)并重新加载徽章。但是 setVisibility 似乎不起作用。即使计数器为零,徽章也是可见的。触发侦听器时,Plus 不再更新。 该代码有效,我检查了一些日志是否触发了侦听器以及是否运行了包含 setVisibility 的行。它似乎只是随机行为。

如果 Activity 被销毁并再次重新创建,它会起作用。

任何帮助将不胜感激!

这就是我初始化徽章的方式

    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);

        

【问题讨论】:

错误已修复:github.com/material-components/material-components-android/… 【参考方案1】:

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

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

【讨论】:

以上是关于Java Android Badge Drawable 在配置更改后无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Badge分析

Android Badge给应用添加角标

Badge Drawable 正在从视图中剪切,并且没有以正确的方式显示 Android Kotlin

java Methode Java pour读取CSV。 Contient unepartieliéàd'autreclasse。 (SQL_GESTION,BADGE)

即时运行和谷歌地图的问题

如何制作边框和颜色?