【Android Fragment】逆水行舟用力撑,一篙松劲退千寻。这篇文章主要讲述Android Fragment 相关的知识,希望能为你提供帮助。
1、Fragment的产生与介绍
android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。2、Fragment的生命周期
Fragment必须是依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期。
文章图片
可以看到Fragment比Activity多了几个额外的生命周期回调方法:
- onAttach(Activity) 当Fragment与Activity发生关联时调用
- onCreateView(LayoutInflater, ViewGroup,Bundle) 创建该Fragment的视图
- onActivityCreated(Bundle) 当Activity的onCreate方法返回时调用
- onDestoryView() 与onCreateView想对应,当该Fragment的视图被移除时调用
- onDetach() 与onAttach相对应,当Fragment与Activity关联被取消时调用
- 继承Fragment,重写onCreateView决定Fragemnt的布局
- 在Activity中声明此Fragment,就当和普通的View一样
使用FragmentManager对Fragment进行了动态的加载
5、Fragment家族常用的API
Fragment常用的三个类:
-
- android.app.Fragment 主要用于定义Fragment
- android.app.FragmentManager 主要用于在Activity中操作Fragment
- android.app.FragmentTransaction 保证一些列Fragment操作的原子性,熟悉事务这个词,一定能明白~
getFragmentManager() // v4中,getSupportFragmentManager (使用Android3.0以下的版本,需要引入v4的包)
b、主要的操作都是FragmentTransaction的方法
FragmentTransaction transaction = fm.benginTransatcion(); //开启一个事务
-
- transaction.add() 往Activity中添加一个Fragment
- transaction.remove() 从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈,这个Fragment实例将会被销毁。
- transaction.replace() 使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体~
- transaction.hide() 隐藏当前的Fragment,仅仅是设为不可见,并不会销毁
- transaction.show() 显示之前隐藏的Fragment
- detach() 会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。
- attach() 重建view视图,附加到UI上并显示。
- transatcion.commit() 提交一个事务
谢谢大家的关注,实例会在后面更新出来,但理论和实践一样重要。 Youth is like smoking. Smoke in the dust. Ash fall.
推荐阅读
- ArcGIS for android添加图层几何体
- Android中使用ListView实现分页刷新(线程休眠模拟)(滑动加载列表)
- QT开发安卓APP的中文字体问题
- Android 秒级编译 Freeline
- Android JNI编程——JNI概念以及C语言Dev-C++开发环境搭建编写HelloWorld
- Android JNI编程——C语言的基本数据类型,输出函数,输入函数
- android播放器(mediaplayer)
- Android 开发--CMakeList调用本地so文件
- 静态RAM和动态RAM差异比较(它们之间有哪些区别())