您的位置:首页 > 移动开发 > Android开发

安卓 使用底部导航栏进行Fragment互相转换 结合笔记2的底部导航栏(新手笔记-6)

2018-03-06 21:34 537 查看
这个笔记需要先看新手笔记-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) {
fragmentTransact
4000
ion.show(fragment1);
} else {
fragmentTransaction.hide(fragment1);
}
}
}
//提交事务
fragmentTransaction.commitAllowingStateLoss();

}

//寻找要匹配的fragment
private Fragment findFragment(String tag) {
Fragment fragment = fragmentManager.findFragmentByTag(tag);
return fragment;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android
相关文章推荐