安卓 使用底部导航栏进行Fragment互相转换 结合笔记2的底部导航栏(新手笔记-6)
2018-03-06 21:34
537 查看
这个笔记需要先看新手笔记-2的底部导航栏的设置,这篇文章接着往下写。
新手笔记-2地址:http://blog.csdn.net/qq_39079912/article/details/79403081
首先对应三个底部导航栏按钮建立三个fragment的xml布局文件(随便写,这里不贴代码了)
之后分别写对应着三个fragment布局的类文件(其中一个为例子,未实现任何功能,但有一块我觉得有用):
接着就是对新手笔记-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; } }
相关文章推荐
- 安卓 使用AsyncTask进行异步消息操作(新手笔记-11)
- 【Android】安卓开发实战之使用Fragment(碎片)实现底部导航栏效果
- 安卓 实现一个底部导航栏(新手笔记-2)
- 使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
- Android ListView和Fragment结合使用,类似于某电商的实现,拿来就能用,详细标注适合新手
- 使用FragmentTabHost 完成一个简单的底部导航栏
- 安卓开发新手篇之如何新建工程并使用手机进行测试
- 使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
- JS 使用 Android + IOS 相册 + 相机 进行自定义头像 + 限制裁剪后图片尺寸 + base64 string 与 图片互相转换
- 安卓开发--应用市场的界面制作(一)--viewpager+fragment实现可滑动的底部导航栏
- 安卓商城学习笔记--01-底部导航栏
- 使用RadioButton+Fragment实现底部导航栏
- 语义Web服务的API使用实例:OWL-S API结合matchmaker、推理机(Jena、Pellet)进行语义转换、匹配、组合及调用web服务
- PreferencesActivity与PreferencesFragment结合使用进行参数设置选项保存
- 使用BitConverter对int与byte[]类型进行互相转换
- 安卓笔记android fragment在viewpager中的使用和屏幕切换的状态保存等
- 【安卓笔记】使用ViewPager+Fragment实现选项卡切换效果
- 使用java反射机制运行时进行Map和POJO的互相转换
- 使用java反射机制运行时进行Map和POJO的互相转换
- 安卓用Fragment+RadioButton组合构成的底部导航栏的实现