在我转到该片段后,底部导航栏仍保持检查状态

时间:2018-06-19 07:25:59

标签: android android-layout

这是我的代码:

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个项目。当我参加活动时,我想要的是正确的情况。但是当我在底部导航栏中选择另一个项目菜单时,第一个项目菜单仍处于选中状态。当我选择第一个菜单项时,第二个菜单项也处于检查状态。

有人可以帮我吗?

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