java - 底部导航视图 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)
解决方案
case R.id.navigation_notifications:
navView.setSelectedItemId(R.id.navigation_notifications);
您不应该使用setSelectedItem
within onNavigationItemSelected
,因为该项目已被选中,所以为什么您再次重复自己......NavigationItemSelectedListener
回调本身被调用,因为您已经选择了该项目..
在上面的代码片段中,当您点击该R.id.navigation_notifications
项目时,onNavigationItemSelected
回调被触发并且您再次使用再次setSelectedItemId
选择相同的项目然后再次调用侦听器回调,这将永远重复..
因此,您需要setSelectedItemId
从NavigationItemSelectedListener
推荐阅读
- python - Matplotlib如何在图中添加圆边?
- html - 我应该学习 Git 和 Github 吗?
- python - 使用 Python 的最大值在数据框的列中返回两个同样大的值
- typescript - 如何从 Typescript 中的接口中提取“字符串”属性名称?
- javascript - 动态创建对象字面量
- vue.js - Nuxt如何覆盖页面的全局css
- swift - 如何将 CMSampleBuffer 转换为原始帧(比如 UYVY)?
- c# - 为什么在不等待的方法上使用 async 修饰符时编译器不会出错?
- python-3.x - Frappe Framework ERPNEXT:如何在 localhost 上启用 CORS
- flutter - 在 Ubuntu 上构建 Flutter 引擎