当条件满足时,我试图在活动中以编程方式从菜单中删除一些项目。我这样做:
if (!sp!!.getStringSet("disabled_app_modules", HashSet<String>()).isNullOrEmpty()) {
val set = sp!!.getStringSet("disabled_app_modules", HashSet<String>())
when {
set.contains("notepad") -> {
bottomNavigationView.menu.removeItem(R.id.notespec)
}
}
}
但没有什么是这样的。如果在小部件声明后直接删除元素,那么一切正常:
bottomNavigationView.menu.removeItem(R.id.notespec)
想这样做:
bottomNavigationView.postInvalidate()
但没有帮助。我认为问题是一个空集来了,但是内存中有一个集并且它不是空的。问题出在以下几行:
set.contains("notepad") -> {
bottomNavigationView.menu.removeItem(R.id.notespec)
}
但是这里不知道哪里可能有问题,一切似乎都写对了,还是不...
更新
有一个假设为什么没有找到这些元素,但在我看来这不是很合理。这是我的一套:
<set name="disabled_app_modules">
<string>"notepad"</string>
</set>
我正在寻找set.contains("notepad")
也许我仍然需要以某种方式考虑括号还是胡说八道?
我解决了我的问题,也许用拐杖,但它工作正常:
最后它会做它需要做的事情。可能会帮助某人:)