一、Fragment简介
Fragment,英文碎片的意思,早期应用在平板设计中,Fragment是Android 3.0 (Honeycomb)被引入的。主要目的是为了给大屏幕(如平板电脑)上更加动态和灵活的UI设计提供支持。
它可以表示Activity中的行为或用户界面部分。我们可以在一个Activity中用多个Fragment组合来构建多窗格的UI,以及在多个Activity中重复使用某个Fragment。它有自己的生命周期,能接受自己的输入,并且可以在 Activity 运行时添加或删除Fragment(有点像在不同 Activity 中重复使用的“子 Activity”)。
简单来说,Fragment其实可以理解为一个具有自己生命周期的控件,只不过这个控件又有点特殊,它有自己的处理输入事件的能力,有自己的生命周期,又必须依赖于Activity,能互相通信和托管。
二、Fragment的用途、为何使用
通过将 Activity 布局分成片段,您可以在运行时修改 Activity 的外观,并在由 Activity 管理的返回栈中保留这些更改。如果仅仅只有Activity布局,那是不够的,不仅在手机上有一套布局,同时在平板上还需要设计一套布局,那样维护起来也麻烦,代码上也有一定的冗余,对于APP包的大小也有一定的压力。Fragment的优势是布局在不同设备上的适配。
三、Fragment的生命周期
这张图是Fragment生命周期和Activity生命周期对比图,可以看到两者还是有很多相似的地方,比如都有onCreate(),onStart(),onPause(),onDestroy()等等,因为Fragment是被托管到Activity中的,所以多了两个onAttach()和onDetach()。这里讲讲与Activity生命周期不一样的方法。
onAttach()
Fragment和Activity建立关联的时候调用,被附加到Activity中去。
onCreate()
系统会在创建Fragment时调用此方法。可以初始化一段资源文件等等。
onCreateView()
系统会在Fragment首次绘制其用户界面时调用此方法。 要想为Fragment绘制 UI,从该方法中返回的 View 必须是Fragment布局的根视图。如果Fragment未提供 UI,您可以返回 null。
onViewCreated()
在Fragment被绘制后,调用此方法,可以初始化控件资源。
onActivityCreated()
当onCreate(),onCreateView(),onViewCreated()方法执行完后调用,也就是Activity被渲染绘制出来后。
onPause()
系统将此方法作为用户离开Fragment的第一个信号(但并不总是意味着此Fragment会被销毁)进行调用。 通常可以在此方法内确认在当前用户会话结束后仍然有效的任何更改(因为用户可能不会返回)。
onDestroyView()
Fragment中的布局被移除时调用。
onDetach()
Fragment和Activity解除关联的时候调用。
但需要注一点是:除了onCreateView,其他的所有方法如果你重写了,必须调用父类对于该方法的实现。
还有一般在启动Fragment的时候,它的生命周期就会执行这几个方法。
三、Fragment的使用
1、继承Fragment,重写onCreateView决定Fragemnt的布局
2、在Activity中声明此Fragment,就当和普通的View一样
这个布局很简单,只是一个LinearLayout里面添加了一个ImageView
然后再新建一个xml布局
让自定义类继承Fragment,并填充布局
在主Activity中实现方法
为按钮设置的点击事件,设置每个点击事件在帧布局中切换图片
Fragment进阶---
一、Fragment回退栈
1.什么是回退栈
Activity切换时是通过栈的形式,不断压栈出栈,但是在Fragment中 ,如果不是手动开启回退栈,它就直接销毁后再重建,但如果将Fragment任务添加到回退栈,这样就不会出现直接销毁再重建的情况,节省了性能并且效率更高,于是就有了类似Activity的栈管理方式。
二、Fragment回退栈的使用
1.fragment跳转的封装
transaction.addToBackStack("my");回退栈方法 在主Activity对应的xml文件中创建退回按钮fragmentManager.popBackStack();
↑该方法是点击按钮退回并显示FrameLayout中上一个显示过的内容,全部退回时可以看到以前显示过的内容闪过。
fragmentManager.popBackStackImmediate();
↑此方法也是直接退回 ,但是速度比上一个快。
2.接下来创建两个Fragment之间的传值的按钮(最基本的传值)
在onCreate中创建对象在主Activity中代码实现按钮传值功能
网友评论