这个笔记需要先看新手笔记-2的底部导航栏的设置,这篇文章接着往下写。
新手笔记-2地址:http://blog.csdn.net/qq_39079912/article/details/79403081
首先对应三个底部导航栏按钮建立三个fragment的xml布局文件(随便写,这里不贴代码了)
之后分别写对应着三个fragment布局的类文件(其中一个为例子,未实现任何功能,但有一块我觉得有用):
public class FirstFragment extends Fragment {
TextView textView;
View view;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//避免同一activity下 多个fragment 切换时重复执行onCreateView方法
// Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态。
if (view == null) {
view = inflater.inflate(R.layout.first_fragment, container, false);
} else {
ViewGroup parent = (ViewGroup) view.getParent();
if (null != parent) {
parent.removeView(view);
}
}
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
}
接着就是对新手笔记-2的活动的修改:
public class MainActivity extends AppCompatActivity {
BottomNavigationBar bottomNavigationBar;
private final String ONE = "one";
private final String TWO = "two";
private final String THREE = "three";
private FragmentManager fragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
//获取一个fragmentManager
fragmentManager = getSupportFragmentManager();
chooseFragment(0);
bottomNavigationBar = findViewById(R.id.bottom_navigation_bar);
//这是下面的一整个NavigationBar导航栏的设置
bottomNavigationBar
.setInActiveColor(R.color.green) //未选中状态颜色
.setActiveColor(R.color.blue) //选中状态颜色
.setMode(BottomNavigationBar.MODE_FIXED) //导航栏模式
.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC) //导航栏背景模式(图标的动画样式和这个有关系 变大了)
.addItem(new BottomNavigationItem(R.drawable.bottom_1, "first"/*选中的图片样式以及文字*/).setInactiveIconResource(R.drawable.ic_launcher_background)/*未选中时样式*/)
.addItem(new BottomNavigationItem(R.drawable.bottom_2, "second").setInactiveIconResource(R.drawable.ic_launcher_background))
.addItem(new BottomNavigationItem(R.drawable.bottom_3, "third").setInactiveIconResource(R.drawable.ic_launcher_background))
.setFirstSelectedPosition(0)//初始化之后第一个选中的位置
.initialise();
//给底部导航栏的各种点击事件进行设置监听器,实现各种功能
bottomNavigationBar.setTabSelectedListener(new BottomNavigationBar.OnTabSelectedListener() {
@Override
public void onTabSelected(int position) { //选中 -> 未选中
Toast.makeText(MainActivity.this, "You click " + position, Toast.LENGTH_SHORT).show();
chooseFragment(position);
}
@Override
public void onTabUnselected(int position) { //未选中 -> 选中
}
@Override
public void onTabReselected(int position) { //选中 -> 选中
}
});
}
private void chooseFragment(int position) {
Fragment fragment = null;
String tag;
//新建一个fragment事务来进行处理
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
//将匹配的碎片放入fragment,即得到fragment
switch (position) {
case 0:
tag = ONE;
if ((fragment = findFragment(tag)) == null) {
fragment = new FirstFragment();
fragmentTransaction.add(R.id.content, fragment, tag);
}
break;
case 1:
tag = TWO;
if ((fragment = findFragment(tag)) == null) {
fragment=new SecondFragment();
fragmentTransaction.add(R.id.content, fragment, tag);
}
break;
case 2:
tag = THREE;
if ((fragment = findFragment(tag)) == null) {
fragment = new ThirdFragment();
fragmentTransaction.add(R.id.content, fragment, tag);
}
break;
}
//判断并且显示fragment(第一次是通过add进去的)
if (fragmentManager.getFragments() != null) {
for (Fragment fragment1 : fragmentManager.getFragments()) {
if (fragment == fragment1) {
fragmentTransaction.show(fragment1);
} else {
fragmentTransaction.hide(fragment1);
}
}
}
//提交事务
fragmentTransaction.commitAllowingStateLoss();
}
//寻找要匹配的fragment
private Fragment findFragment(String tag) {
Fragment fragment = fragmentManager.findFragmentByTag(tag);
return fragment;
}
}