java - Bottomnavigationbar 无法将可检查设置为 false,但 true 可以正常工作
问题描述
我有两个项目,如果我在它们之间交替,它将取消选中另一个项目。但是如果我在一个项目上单击一次我 setChecked(true); 但是当我再次单击时,我希望它 setChecked(false); 但这并没有取消选中该项目。我试过 setCheckable(false); 并且取消选中该项目,但即使我在setChecked(true)之前编写setCheckable(true),我也无法再次检查它。
因此,该代码适用于一种更改,因为它总是在此之后检查 if 语句不再起作用。如果需要,我可以添加更多代码,但感觉就像我错过了一些小部分。
这是代码
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.page_1:
item.setChecked(true);
break;
case R.id.page_2:
if(item.isChecked()) {
item.setChecked(false);
brushComponent_layout.setVisibility(View.INVISIBLE);
}
else {
item.setChecked(true);
brushComponent_layout.setVisibility(View.VISIBLE);
}
break;
default:
break;
}
return false;
}
});
解决方案
我做了一个解决方法,给了我我正在寻找的相同功能,仍然很奇怪。
而不是检查它是否可以检查或检查和取消检查并且不起作用。我查看了布局的可见性,并一直检查该项目。视觉上它有点难看,但它的工作原理更重要。
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.page_1:
item.setChecked(true);
break;
case R.id.page_2:
if(brushComponent_layout.getVisibility() == View.VISIBLE) {
brushComponent_layout.setVisibility(View.INVISIBLE);
}
else {
item.setChecked(true);
brushComponent_layout.setVisibility(View.VISIBLE);
}
break;
default:
break;
}
return true;
}
});
推荐阅读
- c# - Xamarin 表单 (MVVM) 中的绑定问题
- c++ - 在 C++ 98 中优化向量的过滤
- javascript - jQuery 3 替代 e.pageX 和 e.pageY
- javascript - Javascript / Jquery 脚本因超时而终止
- c++ - TBB 编译器错误 - “my_task”:必须初始化引用
- python - 从 API 下载文件
- php - 无法确定属性“属性”的访问类型
- amazon-web-services - 当我在不同帐户中从 Codepipeline 调用 lambda 函数时出现 JobNotFoundException
- c# - 将“窗口”保存为 pdf
- arrays - 从多维数组中删除重复项