- 在点击事件中完成各个menu的点击事件,实现Fragment的替换,另外三个点击事件内容类似
// 去掉menu大于3个后的动画
BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
// 导航 menu 点击事件
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.download:
if(lastShowFragment!=0){
replaceFragment(lastShowFragment,0);
lastShowFragment=0;
}
break;
case R.id.game:
break;
case R.id.search:
break;
case R.id.shopping:
break;
}
// 默认 false
// false 的话 下面颜色不会变化
return true;
}
});
- 在 Activity 中 的 onCreate 中完成 Fragment 数组的装填,并在 Activity 中显示第一个 Fragment
/**
* 初始化 Fragment 并在 Activity 中显示第一个 Fragment
*/
private void initFragment(){
fragments=new ArrayList<>();
for(int i=0;i<4;i++){
fragments.add(FruitFragment.
newFragment());
}
lastShowFragment=0;
/**
* 在 Activity 中加载第一个 Fragment
*/
getSupportFragmentManager()
.beginTransaction()
.add(R.id.relative_layout,fragments.get(0))
.show(fragments.get(0))
.commit();
Log.d(TAG,"initFragment over");
}
- 根据记录最后在 Activity 中显示的 Fragment 的变量 lastShowFragment ,和 menu 需要的 Fragment 完成替换
/**
* 替换 Activity 中的 Fragment
* @param lastShowFragment
* @param index
*/
private void replaceFragment(int lastShowFragment,int index){
FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
transaction.hide(fragments.get(lastShowFragment));
// 确认需要的 Fragment 是否已添加
if(!fragments.get(index).isAdded()){
transaction.add(R.id.relative_layout, fragments.get(index));
}
transaction.show(fragments.get(index)).commitAllowingStateLoss();
Log.d(TAG,"replaceFragment lastShowFragment : "+lastShowFragment+" index : "+index);
}
-
效果
Screenshot_1519977714.png
Screenshot_1519977720.png
Screenshot_1519977726.png
Screenshot_1519977732.png
小结
BottomNavigationViewHelper 参考博客
BottomNavigationView + Fragment 参考博客