这是我的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BottomNavigationView navigation = findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(this);
loadFragment(new WalletFragment());
}
private boolean loadFragment(Fragment fragment){
if(fragment != null){
getSupportFragmentManager().beginTransaction().replace(R.id.container_nav, fragment).commit();
return false;
}
return false;
}
public boolean onNavigationItemSelected(@NonNull MenuItem item){
Fragment fragment = null;
switch(item.getItemId()){
case R.id.navigation_wallet:
fragment = new WalletFragment();
item.setChecked(true);
break;
case R.id.navigation_setting:
fragment = new SettingFragment();
item.setChecked(true);
break;
}
return loadFragment(fragment);
}
我在底部导航栏菜单中只有2个项目。当我参加活动时,我想要的是正确的情况。但是当我在底部导航栏中选择另一个项目菜单时,第一个项目菜单仍处于选中状态。当我选择第一个菜单项时,第二个菜单项也处于检查状态。
有人可以帮我吗?
答案 0 :(得分:0)
之前
item.setChecked(true)
请执行以下操作
int size = navigation.getMenu().size();
for (int i = 0; i < size; i++)
{
navigation.getMenu().getItem(i).setChecked(false);
}
答案 1 :(得分:0)
在您的代码中,您从未取消选中switch-case语句中的任何菜单项。因此,通常情况下,如果未手动取消选中项目,则应检查这些项目。请参阅有关How to uncheck checked items in Navigation View的StackOverflow问题的答案,其中显示了如何取消选中所有元素:
int size = mNavigationView.getMenu().size();
for (int i = 0; i < size; i++) {
mNavigationView.getMenu().getItem(i).setChecked(false);
}
因此,要在代码中实现此功能,请在每种情况下使用该代码:
public boolean onNavigationItemSelected(@NonNull MenuItem item){
Fragment fragment = null;
int size = navigation.getMenu().size();
switch(item.getItemId()){
case R.id.navigation_wallet:
fragment = new WalletFragment();
for (int i = 0; i < size; i++) {
navigation.getMenu().getItem(i).setChecked(false);
}
item.setChecked(true);
break;
case R.id.navigation_setting:
fragment = new SettingFragment();
for (int i = 0; i < size; i++) {
navigation.getMenu().getItem(i).setChecked(false);
}
item.setChecked(true);
break;
}
return loadFragment(fragment);
}