首页 > 解决方案 > 底部导航视图 setSelectedItem 在 Android Java 中崩溃的应用程序

问题描述

我已经在我的应用程序中实现了这个底部导航代码,每当我尝试在视图上设置选定的项目 ID 时,我似乎遇到了问题。当我尝试设置选定的项目 ID 时,它会使应用程序崩溃...请帮助

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

这是logcat错误

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)

每当我尝试取消注释上面 switch 语句中的行并选择底部导航菜单项时,应用程序崩溃...请帮助导航图标

标签: javaandroidbottomnavigationview

解决方案


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

您不应该使用setSelectedItemwithin onNavigationItemSelected,因为该项目已被选中,所以为什么您再次重复自己......NavigationItemSelectedListener回调本身被调用,因为您已经选择了该项目..

在上面的代码片段中,当您点击该R.id.navigation_notifications项目时,onNavigationItemSelected回调被触发并且您再次使用再次setSelectedItemId选择相同的项目然后再次调用侦听器回调,这将永远重复..

因此,您需要setSelectedItemIdNavigationItemSelectedListener


推荐阅读