0

Here is my code:

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

I have only 2 items in bottom navigation bar menus. When I go in to the activity, it is in correct situation that I wanted. But when I choose another item menu in bottom navigation bar, the first one remains in the checked state. And when I choose to first menu item, the second one also remains in checked state.

Someone can help me please?

joey
  • 73
  • 2
  • 14

2 Answers2

0

Before

 item.setChecked(true)

Do following

 int size = navigation.getMenu().size();
 for (int i = 0; i < size; i++) 
 {
    navigation.getMenu().getItem(i).setChecked(false);
 }
0

In your code, you have never unchecked any Menu items inside your switch-case statements. So, usually, the items should remain checked if they are not unchecked manually. Refer to the answer of this StackOverflow Question about How to uncheck checked items in Navigation View, where it shows how to uncheck all the elements:

int size = mNavigationView.getMenu().size();
for (int i = 0; i < size; i++) {
    mNavigationView.getMenu().getItem(i).setChecked(false);
}

So, to implement this in your code use that code in each of the cases:

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);
}
UkFLSUI
  • 5,509
  • 6
  • 32
  • 47