user14187680
user14187680

Reputation:

Bottom Navigation View setSelectedItem crashing app in Android Java

I have implemented this Bottom Navigation Code in my app and I seem to have an issue whenever I try to set the selected item id on the view. It crashes the app when I try to set the selected item id...Please help

public class MainActivity extends AppCompatActivity {
Date mydate;
ImageButton myfloat;
TextView view,minfo1,minfo2,minfo3;
TextView[] medicalinfos;
Typeface Ubuntu;
BottomNavigationView navView;
ActionBar actionBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        actionBar = getSupportActionBar();
         //define Bottom NavigationView
        navView =findViewById(R.id.nav_view);
        //Set a onselecteditemlistener for this Bottom Navigation View
        navView.setOnNavigationItemSelectedListener(navListener);
        }
        //Define the listener
              @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            int id=item.getItemId();
            switch(id){
                case R.id.navigation_home:
                    navView.setSelectedItemId(R.id.navigation_home);
                    actionBar.setTitle("Medical Information");
                    break;
                case  R.id.navigation_notifications:
                    //navView.setSelectedItemId(R.id.navigation_notifications);
                    actionBar.setTitle("Notifications");
                    break;
                case R.id.navigation_dashboard:
                    //navView.setSelectedItemId(R.id.navigation_dashboard);
                    actionBar.setTitle("History");
                    break;
                case R.id.navigation_graphic:
                    actionBar.setTitle("More Information");
                    break;
            }
            return false;
        }
    };    
}      
        

Here is the logcat error

at com.example.medicalnotifier.MainActivity$1.onNavigationItemSelected(MainActivity.java:58)
2021-03-10 23:16:25.010 27238-27238/com.example.medicalnotifier E/AndroidRuntime:     at com.google.android.material.bottomnavigation.BottomNavigationView$1.onMenuItemSelected(BottomNavigationView.java:241)
        at androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:834)
        at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:985)
        at com.google.android.material.bottomnavigation.BottomNavigationView.setSelectedItemId(BottomNavigationView.java:558)
        at com.example.medicalnotifier.MainActivity$1.onNavigationItemSelected(MainActivity.java:58)
        at com.google.android.material.bottomnavigation.BottomNavigationView$1.onMenuItemSelected(BottomNavigationView.java:241)
        at androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:834)
        at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:985)
        at com.google.android.material.bottomnavigation.BottomNavigationView.setSelectedItemId(BottomNavigationView.java:558)
        at com.example.medicalnotifier.MainActivity$1.onNavigationItemSelected(MainActivity.java:58)
        at com.google.android.material.bottomnavigation.BottomNavigationView$1.onMenuItemSelected(BottomNavigationView.java:241)
        at androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:834)
        at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:985)
        at com.google.android.material.bottomnavigation.BottomNavigationView.setSelectedItemId(BottomNavigationView.java:558)
        at com.example.medicalnotifier.MainActivity$1.onNavigationItemSelected(MainActivity.java:58)
        at com.google.android.material.bottomnavigation.BottomNavigationView$1.onMenuItemSelected(BottomNavigationView.java:241)
        at androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:834)
        at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:985)
        at com.google.android.material.bottomnavigation.BottomNavigationView.setSelectedItemId(BottomNavigationView.java:558)
        at com.example.medicalnotifier.MainActivity$1.onNavigationItemSelected(MainActivity.java:58)
        at com.google.android.material.bottomnavigation.BottomNavigationView$1.onMenuItemSelected(BottomNavigationView.java:241)
        at androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:834)
        at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:985)
        at com.google.android.material.bottomnavigation.BottomNavigationView.setSelectedItemId(BottomNavigationView.java:558)
        at com.example.medicalnotifier.MainActivity$1.onNavigationItemSelected(MainActivity.java:58)
        at com.google.android.material.bottomnavigation.BottomNavigationView$1.onMenuItemSelected(BottomNavigationView.java:241)
        at androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:834)
        at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:985)
        at com.google.android.material.bottomnavigation.BottomNavigationView.setSelectedItemId(BottomNavigationView.java:558)
        at com.example.medicalnotifier.MainActivity$1.onNavigationItemSelected(MainActivity.java:58)
        at com.google.android.material.bottomnavigation.BottomNavigationView$1.onMenuItemSelected(BottomNavigationView.java:241)
        at androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:834)
        at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:985)
2021-03-10 23:16:25.011 27238-27238/com.example.medicalnotifier E/AndroidRuntime:     at com.google.android.material.bottomnavigation.BottomNavigationView.setSelectedItemId(BottomNavigationView.java:558)
        at com.example.medicalnotifier.MainActivity$1.onNavigationItemSelected(MainActivity.java:58)

Whenever I try to uncomment the lines in the switch statement above and select on a Bottom Navigation menu item, the app crashes...Please helpNavigation Icons

Upvotes: 0

Views: 484

Answers (2)

user14187680
user14187680

Reputation:

This is exactly what i was looking for, seems you can't use setSelectedItem because its kind of circular(repeitive) using this works to set the Menu Item checked

  navView.getMenu().findItem(R.id.navigation_dashboard).setChecked(true);

Upvotes: 0

Zain
Zain

Reputation: 40810

  case R.id.navigation_notifications:
       navView.setSelectedItemId(R.id.navigation_notifications);

You shouldn't use setSelectedItem within onNavigationItemSelected, because the item is already selected, so why you repeat yourself again ... the NavigationItemSelectedListener callback itself is called because you already selected the item..

In the above snippet when you hit the R.id.navigation_notifications item the onNavigationItemSelected callback is triggered and you again use setSelectedItemId to select the same item again then the listener callback is called once more, and this would be repeated forever..

So, you need to remove these setSelectedItemId statements from within the NavigationItemSelectedListener

Upvotes: 1

Related Questions