Fragment的使用小结(一)
来源:互联网 发布:private equity 知乎 编辑:程序博客网 时间:2024/06/10 07:14
现在很多app应用都使用了Fragment,不仅仅是因为Fragment使得UI设计更加灵活,还有在性能上有大幅度提高,并且占用内存降低,在同样的界面Activity占用内存比Fragment要多,响应速度Fragment比Activty在中低端手机上快几倍!
- 官方介绍:
A Fragment represents a behavior or a portion of user interface in an Activity. You can combine multiple fragments in a single activity to build a multi-pane UI and reuse a fragment in multiple activities. You can think of a fragment as a modular section of an activity, which has its own lifecycle, receives its own input events, and which you can add or remove while the activity is running (sort of like a “sub activity” that you can reuse in different activities).
翻译: Fragment是Activity的一部分内容. 你可以在一个单独的Activity中合并放置多个Fragment, 用来构建一个多面板的UI界面, 并且还可以复用Fragment在多个Activity. 可以把他想成是Activity的一个子模块. 你可以在Activity运行时, 添加或移除Fragment.拥有自己的生命周期, 接收自己的事件.(类似于一个可以在不同Activity种复用的子Activity)。本篇文章我主要介绍以下几个基础知识点,下篇重点说明Fragment与Fragment、Activity通信:
- Fragment的创建和使用
- Fragment的生命周期
- Fragment常用方法 add(), show(), hide(), replace()
一.Fragment的创建和使用
静态创建
注意:
1. 配置andriod:name指定在layout中实例化的Fragment类
2. 至少配置 id 或 tag, 否则会抛异常
1.在布局文件中添加Fragment的布局中配置fragment标签
<fragment android:id="@+id/fragment_first" android:tag="first" android:name="cn.huyaru.com.fragmentdemo.FirstFragment" android:layout_width="match_parent" android:layout_height="match_parent" />
2.创建Fragment的布局文件
3.创建Fragment, 重写onCreateView, 配置真正内容
public class FirstFragment extends Fragment { // 重写 onCreateView 配置布局内容 /** * @param inflater 布局填充器, 打气筒 * @param container Fragment所在的布局容器 * @param savedInstanceState 之前保存的状态 * @return */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { /** * resource:Fragment需要加载的布局文件 * root:加载layout的父ViewGroup * attactToRoot:false,不返回父ViewGroup * */ View rootView = inflater.inflate(R.layout.fragment_first , container , false); return rootView; }}
动态创建
1. 在layout布局中添加一个布局容器
<FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" > </FrameLayout>
2.创建Fragment, 重写onCreateView, 配置真正内容
3.通过Fragment管理器添加/替换Fragment
// 1. 获取Fragment管理器. FragmentManager fm = getFragmentManager(); // 2. 开启Fragment处理事务. FragmentTransaction ft = fm.beginTransaction(); // 3. 进行Fragment操作 ft.replace(R.id.container, new FirstFragment()); // 4. 进行事务的提交 ft.commit();
Fragment的向下兼容
- Fragment是在Andriod3.0才出现的. API11
v4包提供了Fragment, 将Fragment兼容到3.0及以下版本.
不同的地方:
- Fragment继承 android.support.v4.app.Fragment
- Activity继承 android.support.v4.app.FragmentActivity
- getFragmentManager() -> getSupportFragmentManager() 获取管理器
二 .Fragment的生命周期
Fragment总是必须被嵌入到一个activity中。它们的生命周期直接受其宿主activity的生命周期影响。
- onAttach()
当fragment被绑定到activity时被调用(Activity会被传入)。 - onCreateView()
创建和fragment关联的view hierarchy时被调用。 - onActivityCreated()
当activity的onCreate()方法返回时被调用。 - onDestroyView()
当和fragment关联的view hierarchy被移除时调用。 - onDetach()
当fragment从activity解除关联时被调用。
注意 - 通过布局文件的fragment标签关联的Fragment的生命周期
特点:跟Activity的生命周期高度的吻合。 - 通过代码动态添加的Fragment的生命周期
特点:当提交事务之后,才会走生命周期方法。
activity和fragment的生命周期最显著的差异是各自如何在它的后台堆栈中储存。默认情况下,activity在停止后,它会被放到一个由系统管理的用于保存activity的back stack(因此用户可以使用BACK按键导航回退)。但是,当你在一个事务期间移除fragment时,只有显式调用addToBackStack()请求保存实例,才会被放到一个由宿主activity管理的back stack(会退栈)。
三. Fragment常用方法(add(), show(), hide(), replace())
- 通过add方法(效率高)
特点:第一次add的时候执行生命周期方法,之后的show和hide是不影响生命周期的 - 通过Replace方法(少,效率低)
特点:没replace一次,就会把之前老的Fragment给销毁掉,然后重新创建一个新的。
注意:如果你的app有大量图片,这时更好的方式可能是replace,配合你的图片框架在Fragment视图销毁时,回收其图片所占的内存。
- Fragment的使用小结(一)
- Fragment的使用(一)
- Fragment的使用与通信方式小结
- Fragment加Viewpager的使用小结
- Fragment的使用小结(二)
- Fragment使用小结
- Android Fragment使用小结
- Fragment使用小结(三)
- Fragment使用小结
- Fragment生命周期和使用小结
- Fragment的概念与使用(一)--基本概念
- Fragment的概念与使用(一)--基本概念
- Android之Fragment的使用(一)
- Fragment的进一步使用(一)
- Fragment的解析与使用(一)
- Fragment对象的使用(一)
- Fragment的介绍和使用(一)
- Android之Fragment的使用(一)
- 一个与stl有关的概率coredump问题的定位
- C#中的collection类
- ionic之副标题bar-subheader
- Java程序员应该了解的10个面向对象设计原则
- Xcode8 iOS10打包上传错误ERROR ITMS-90682: "Invalid Bundle. The asset catalog at***
- Fragment的使用小结(一)
- C. Ray Tracing
- 个性化修改U盘图标
- 触发Full GC执行的情况
- 网络编程
- 欢迎使用CSDN-markdown编辑器
- 各种距离算法汇总
- Android群英传知识点回顾——第十二章:Android5.X新特性详解
- Qt之字典划词