随着大众生活水平的提升,再加上移动互联网的迅速发展,几乎每一个人都至少拥有一台搭载Android系统的移动设备。Android设备的多样性给咱们带来了很大的便捷,各Android设备拥有不一样分辨率和不一样屏幕大小,特别是平板电脑和手机间的差异巨大,使得一样的界面在不一样的设备上显示出不一样的效果。为了可以同时兼顾到手机和平板电脑的开发,自Android 3.0版本开始引入了碎片的概念,也就是Fragment。java
Fragment做为Android最基本、最重要的基础概念之一,在开发中常常会用到,本章咱们一块儿来学习 Fragment的使用。android
Fragment 是一种能够嵌人在Activity中的UI片断,它能让程序更加合理地利用大屏幕空间,于是Fragment在平板上应用很是普遍。Fragment与Activity十分类似,它包含布局,同时也具备本身的生命周期。微信
一个Fragment表明着Activity中一种行为或者Activity用户界面中的一部分。咱们能够将多个Fragment组合在一个Activity中,组成一个多窗格布局;一样咱们也能够在多个Activity中重复使用某个Fragment。咱们能够将Fragment看成一个Activity中的小模块(它有它本身的生命周期,本身的事件处理机制),在Activity运行过程当中,咱们能够动态地添加或者移除这个模块。架构
Android 3.0引入Fragment的初衷是为了适应大屏幕的平板电脑,因为平板电脑的屏幕比手机屏幕更大,所以能够容纳更多的UI组件,且这些UI组件之间存在交互关系。Fragment简化了大屏幕UI的设计,它不须要开发者管理组件包含关系的复杂变化,开发者使用Fragment对 UI组件进行分组、模块化管理,就能够更方便地在运行过程当中动态更新 Activity的用户界面。app
好比说:咱们的应用中有一个文章列表和文章详情页面,因为平板设备空间大,列表Fragment和详情Fragment能够放在同一个页面中,而在手持设备上,则分为两个Activity做展现。以下图:ide
如上图所示的新闻浏览界面,该界面须要在屏幕左边显示新闻列表,并在屏幕右边显示新闻内容,此时就能够在Activity中显示两个并排的Fragment:左边的Fragment显示新闻列表,右边的Fragment显示新闻内容。因为每一个Fragment都拥有本身的生命周期,并可响应用户输入事件,所以能够很是方便地实现:当用户单击左边列表中的指定新闻时,右边的Fragment就会显示相应的新闻内容。上图所示左边的“平板电脑”部分显示了这种UI界面。模块化
经过使用上面的Fragment设计机制,能够取代传统的让一个Activity显示新闻列表,另—个Activity显示新闻内容的设计。因为Fragment是可复用的组件,所以若是须要在正常尺寸的手机屏幕上运行该应用,则能够改成使用两个 Activity: Activity A 包含 Fragment A、Activity B 包含 FragmentB。其中 ActivityA仅包含显示文章列表的Fragment A,而当用户选择一篇文章时,它会启动包含新闻内容的Activity B,如上图所示右边的手机部分。布局
从上面的例子知道,Fragment在开发中很是重要。归纳起来,使用Fragment有如下一些好处:性能
Fragment能够将Activity分离成多个可重用的组件,每一个都有它本身的生命周期和UI。学习
Fragment能够轻松建立动态灵活的UI设计,能够适应于不一样的屏幕尺寸。
Fragment是一个独立的模块,牢牢地与Activity绑定在一块儿。能够运行中动态地移除、加入、交换等。
Fragment提供一个新的方式让咱们在不一样的安卓设备上统一UI。
Fragment 能够解决Activity间的切换不流畅,轻量切换问题。
Fragment 能够替代TabActivity作导航,性能更好。
Fragment 在4.2.版本中新增了嵌套Fragmeng的使用方法,可以生成更好的界面效果。
Fragment作局部内容更新更方便,原来为了达到这一点要把多个布局放到一个Activity里面,如今能够用多Fragment来代替,只有在须要的时候才加载Fragment,大大提升了性能。
与建立Activity相似,要建立一个Fragment必须建立一个类继承自Fragment。
不少时候咱们都是直接重写Fragment,其实Fragment类是一个基类,还有几个派生子类,Fragment的继承关系以下图所示。
● DialogFragment
显示一个浮动的对话框。使用这个类建立对话框是替代Activity建立对话框的最佳选择。由于能够把fragmentdialog放入到Activity的返回栈中,使用户能再返回到这个对话框。
● ListFragment
显示一个列表控件,就像ListActivity类,它提供了不少管理列表的方法,好比onListItemClick()方法响应click事件。
● PreferenceFragment
显示一个由Preference对象组成的列表,与PreferenceActivity相同。它用于为程序建立“设置”Activity。
● WebViewFragment
WebViewFragment封装了WebView,随着WebViewFragment的暂停或恢复,WebView也进入暂停或恢复状态。
建立时能够根据须要使用Fragment基类或它的任意子类。为了控制Fragment显示的组件,一般须要重写onCreateView()方法,该方法返回的View 将做为该Fragment显示的View组件,当Fragment绘制界面组件时将会回调该方法。
须要注意的是,Android系统提供了两个Fragment类,分别是android.app.Fragment和 android.support.v4.app.Fragment。其中继承 android.app.Fragment 类则程序只能兼容 Android 4.0 以上的系统,继承android.support.v4.app.Fragment类能够兼容低版本的Android系统。
接下来经过一段示例代码来演示如何建立Fragment,首先建立一个布局文件,里面只有一个文本框,代码以下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#1fc186" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是个人第一个Fragment" android:textColor="#0b0faf" android:textSize="18sp"/> </LinearLayout>
接下来建立咱们的第一个Fragment,并让其继承Fragment,代码以下:
package com.apkbus.jinyu.fragment; import android.app.Fragment; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class FirstFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_first, container, false); return view; } }
上述代码重写了 Fragment的onCreateView()方法,并在该方法中调用了 Layoutlnflater的 inflate()方法加载了布局文件,并返回该布局文件对应的View组件。
Fragment建立完成后并不能单独使用,还须要将Fragment加载到Activity中,具体方法下一期继续学习。
今天就先到这里,若是有问题欢迎留言一块儿探讨,也欢迎加入Android零基础入门技术讨论微信群,共同成长!
若是该系列分享对你有帮助,就动动手指关注、点赞、留言吧,你的互动就是对我最大的鼓励!
此文章版权为微信公众号分享达人秀(ShareExpert)——鑫鱻全部,若需转载请联系做者受权,特此声明!
往期总结回顾:
Android零基础入门第1节:Android的前世此生
Android零基础入门第2节:Android 系统架构和应用组件那些事
Android零基础入门第3节:带你一块儿来聊一聊Android开发环境
Android零基础入门第4节:正确安装和配置JDK, 高富帅养成第一招
Android零基础入门第5节:善用ADT Bundle, 轻松邂逅女神
Android零基础入门第6节:配置优化SDK Manager, 正式约会女神
Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅
Android零基础入门第8节:HelloWorld,个人第一趟旅程出发点
Android零基础入门第9节:Android应用实战,不懂代码也能够开发
Android零基础入门第10节:开发IDE大升级,终于迎来了Android Studio
Android零基础入门第11节:简单几步带你飞,运行Android Studio工程
Android零基础入门第12节:熟悉Android Studio界面,开始装逼卖萌
Android零基础入门第13节:Android Studio个性化配置,打造开发利器
Android零基础入门第14节:使用高速Genymotion,跨入火箭时代
Android零基础入门第15节:掌握Android Studio项目结构,扬帆起航
Android零基础入门第16节:Android用户界面开发概述
Android零基础入门第17节:文本框TextView
Android零基础入门第18节:输入框EditText
Android零基础入门第19节:按钮Button
Android零基础入门第20节:复选框CheckBox和单选按钮RadioButton
Android零基础入门第21节:开关组件ToggleButton和Switch
Android零基础入门第22节:图像视图ImageView
Android零基础入门第23节:图像按钮ImageButton和缩放按钮ZoomButton
Android零基础入门第24节:自定义View简单使用,打造属于你的控件
Android零基础入门第25节:简单且最经常使用的LinearLayout线性布局
Android零基础入门第26节:两种对齐方式,layout_gravity和gravity大不一样
Android零基础入门第27节:正确使用padding和margin
Android零基础入门第28节:轻松掌握RelativeLayout相对布局
Android零基础入门第29节:善用TableLayout表格布局
Android零基础入门第30节:两分钟掌握FrameLayout帧布局
Android零基础入门第31节:少用的AbsoluteLayout绝对布局
Android零基础入门第32节:新推出的GridLayout网格布局
Android零基础入门第33节:Android事件处理概述
Android零基础入门第34节:Android中基于监听的事件处理
Android零基础入门第35节:Android中基于回调的事件处理
Android零基础入门第36节:Android系统事件的处理
Android零基础入门第37节:初识ListView
Android零基础入门第38节:初识Adapter
Android零基础入门第39节:ListActivity和自定义列表项
Android零基础入门第40节:自定义ArrayAdapter
Android零基础入门第41节:使用SimpleAdapter
Android零基础入门第42节:自定义BaseAdapter
Android零基础入门第43节:ListView优化和列表首尾使用
Android零基础入门第44节:ListView数据动态更新
Android零基础入门第45节:网格视图GridView
Android零基础入门第46节:列表选项框Spinner
Android零基础入门第47节:自动完成文本框AutoCompleteTextView
Android零基础入门第48节:可折叠列表ExpandableListView
Android零基础入门第49节:AdapterViewFlipper图片轮播
Android零基础入门第50节:StackView卡片堆叠
Android零基础入门第51节:进度条ProgressBar
Android零基础入门第52节:自定义ProgressBar炫酷进度条
Android零基础入门第53节:拖动条SeekBar和星级评分条RatingBar
Android零基础入门第54节:视图切换组件ViewSwitcher
Android零基础入门第55节:ImageSwitcher和TextSwitcher
Android零基础入门第56节:翻转视图ViewFlipper
Android零基础入门第57节:DatePicker和TimePicker选择器
Android零基础入门第58节:数值选择器NumberPicker
Android零基础入门第59节:经常使用三大Clock时钟组件
Android零基础入门第60节:日历视图CalendarView和定时器Chronometer
Android零基础入门第61节:滚动视图ScrollView
Android零基础入门第62节:搜索框组件SearchView
Android零基础入门第63节:值得借鉴学习的选项卡TabHost
Android零基础入门第64节:揭开RecyclerView庐山真面目
Android零基础入门第65节:RecyclerView分割线开发技巧
Android零基础入门第66节:RecyclerView点击事件处理
Android零基础入门第67节:RecyclerView数据动态更新
Android零基础入门第68节:RecyclerView添加首尾视图
Android零基础入门第69节:ViewPager快速实现引导页
Android零基础入门第70节:ViewPager打造TabHost效果
Android零基础入门第71节:CardView简单实现卡片式布局
Android零基础入门第72节:SwipeRefreshLayout下拉刷新
Android零基础入门第73节:Activity建立和配置
Android零基础入门第74节:Activity启动和关闭
Android零基础入门第75节:Activity状态和生命周期
Android零基础入门第76节:Activity数据保存和横竖屏切换
Android零基础入门第77节:Activity任务栈和启动模式
Android零基础入门第78节:四大组件的纽带——Intent
Android零基础入门第79节:Intent 属性详解(上)
Android零基础入门第80节:Intent 属性详解(下)
Android零基础入门第81节:Activity数据传递
Android零基础入门第82节:Activity数据回传
Android零基础入门第83节:Activity间数据传递方法汇总