用FragmentTabHost管理Fragment,实现页面切换
来源:互联网 发布:很污的网络用词 编辑:程序博客网 时间:2024/05/11 20:37
现在大多数的应用的主页面都有点类似新浪微博的主页面,下方是一个导航栏,点击导航栏会进行页面的切换。从技术实现上来说,这并不复杂,可以有很多方法来实现,比如用radiogroup和fragment配合就可以。可是这样我们并不是我们想要的,因为这样写需要我们自己写不少逻辑去控制。俗话说不会偷懒的程序员不是好程序员,所以我们希望系统给我们提供一个可以对Fragment管理的类,我们不用关心太多的逻辑,只需要做好相应Fragment的显示,那样是不是很爽。值得高兴的是系统真的提供了这样一个类:FragmentTabHost。可是它存在一个缺陷,到后面再说,我们先简单看一下它的用法。
它的用法和别的控件一样需要我们先在布局文件中声明,如下:
接下来我们就需要创建导航栏单个item的通用布局,如下:
这里只是简单的演示一下用法,Fragment布局里面就一个TextView用于在切换的时候区分,这里就不贴代码了。
接下来我们在activity里面进行设置就可以了,代码如下:
简单看一下效果:
ok~效果出来了 上面说过它存在一个缺陷,缺陷就是每次FragmentTabHost切换fragment时会重新调用onCreateView()重新绘制UI。假如我们在onCreateView()中有网络操作,在切换的时候也会重复进行,这样当然不是我们希望的。当然也有解决方法,我们可以在onCreateView()方法里面做一些处理:
private View rootView;// 缓存Fragment view @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.i(TAG, "onCreateView"); if (rootView == null) { rootView = inflater.inflate(R.layout.fragment_home, null); //假如有网络操作建议放在这里面,避免重复加载 } // 缓存的rootView需要判断是否已经被加过parent,如果有parent需要从parent删除,要不然会发生这个rootview已经有parent的错误。 ViewGroup parent = (ViewGroup) rootView.getParent(); if (parent != null) { parent.removeView(rootView); } return rootView; }到这也算是比较圆满了,可是大家想过没有,假如它内部能够通过hide和show来管理fragment多好,这样我们就不用做以上处理,而且在效率上也会高了很多。下面我就贴一个重写了的FragmentTabHost它的内部就是通过hide和show来隐藏和显示Fragment的,而且它的用法和系统的完全一样。大家可以导入到自己的项目中,直接使用。
最后我们来想一想,用它来管理Fragment的好处是什么。比如说,需求发生了改变,我们需要添加或删除Fragment的时候,我们只需要,在Class数组添加或删除相应的Fragment的calss,别的逻辑都不需要改变就可以达到我们想要的效果。ok~就写这么多了。
2 0
- 用FragmentTabHost管理Fragment,实现页面切换
- FragmentTabHost、Fragment实现底部点击切换Tab页面
- FragmentTabHost、Fragment实现底部点击切换Tab页面
- FragmentTabHost+Fragment实现底部菜单的切换
- FragmentTabHost+Fragment实现选项卡页面
- fragment + fragmentTabHost实现底部菜单与自定义fragment管理
- 使用fragment嵌套FragmentTabHost实现筛选切换框架
- DrawerLayout+FragmentTabHost+ToolBar实现左滑菜单及fragment切换
- 用FragmentTabhost实现仿京东页面
- 用FragmentTabHost加Fragment实现底部菜单
- 用Fragment+FragmentTabHost++ViewPager 实现底部菜单栏
- ViewPager+Fragment实现页面切换
- Viewpager+Fragment实现页面切换
- FragmentTabHost切换Fragment时避免重复加载UI,导致切换后重绘页面的问题解决
- 用FragmentTabHost保存Fragment状态并添加切换动画
- Android之tab实现切换页面效果—FragmentTabHost
- 重写FragmentTabHost,避免导航栏切换过程中再次创建内容页面Fragment
- 重写FragmentTabHost,防止FragmentTabHost切换fragment重新调用onCreateView()
- 第十一周项目—阅读程序,说出在测试函数中不同情况的调用产生的结果(5 a)
- Objective-C ---NSArray NSDictionary(梳理整理)
- 为Android app创建keystore及创建后获取keystore相关信息
- dll的注入 (远程线程方式)
- 一个毕业设计 儿童趣味数学 app
- 用FragmentTabHost管理Fragment,实现页面切换
- 用户行为数据
- ASM磁盘超过disk_repair_time导致磁盘状态为forcing
- Bash 的操作坏境
- 页面返回与空链接的使用
- 怎样在oracle virtualbox里添加网卡
- mysql int(3)与int(11)的区别
- 华为存储的多路径说明
- iOS tableView多选,长按弹出菜单