Reputation:
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 help
Upvotes: 0
Views: 484
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
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