目录
在Android开发中经常碰到一些坑,让自己忙碌很久才发现哪个地方出现了问题。其实可能都是难以发现的小细节和小疏漏,就会造成你无尽的麻烦和浪费时间。我总结下开发中碰到的问题,希望大家看得到后,碰到同样的问题能少采坑。
BottomNavigationView设置setOnNavigationItemSelectedListener后超过3个item的menu点击无效
Xml中配置是这样的:
menu菜单内容的xml文件配置是这样的bottom_nav_menu:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/navigation_home"
android:icon="@drawable/ic_home_black_24dp"
android:title="@string/home"
/>
<item
android:id="@+id/navigation_classify"
android:icon="@drawable/ic_classify"
android:title="@string/classify"
/>
<item
android:id="@+id/navigation_find"
android:icon="@drawable/ic_find"
android:title="@string/find"
/>
<item
android:id="@+id/navigation_shopcar"
android:icon="@drawable/ic_shopcar"
android:title="@string/shopCar"
/>
<item
android:id="@+id/navigation_mine"
android:icon="@drawable/ic_mine"
android:title="@string/mine"
/>
</menu>
在onCreate中初始话为如图
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_home);
binding.navView.setOnNavigationItemSelectedListener(this);
setData();
}
menu中有5个item,当给BottomNavigationView设置setOnNavigationItemSelectedListener后发现第四个和第五个item无法点击了,如图:
解决方案一
添加一行代码:
不可将setContentView(R.layout.activity_home);方法添加在 DataBindingUtil.setContentView(this, R.layout.activity_home)之前,否则还是无法解决问题:
解决方案二
将BottomNavigationView.OnNavigationItemSelectedListener 的实例化放在onCreate外边可以接觉该问题
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_home);
binding.navView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
setData();
}
//在class括号内就初始化,不可放入onCreate中初始化
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
return true;
case R.id.navigation_classify:
return true;
case R.id.navigation_find:
return true;
case R.id.navigation_shopcar:
return true;
case R.id.navigation_mine:
return true;
}
return false;
}
};
方案一和 方案二可解决问题,如图。
我们在进行Fragment+底部导航栏时,以前底部栏常采用的方式为使用Radiogroup的方式解决,其实大家尝试用用BottomNavigationView,也不错哦。