您的位置:首页 > 其它

Fragment的使用小结(一)

2016-10-15 00:15 260 查看
现在很多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
* at
4000
tactToRoot: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视图销毁时,回收其图片所占的内存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: