1 Fragment

Fragment是什么?

Fragment允许将Activity拆分成多个完全独立封装的可重用的组件,每个组件有它自己的生命周期和UI布局。

每个Fragment都是独立的模块,并与它所绑定的Activity紧密联系在一起。多个Activity可以共用一个Fragment。此外,Fragment还具有动态构建UI的能力,可以在一个正在显示的Activity中添加、删除、更换Fragment。

Fragment为大量的不同型号、尺寸、分辨率的设备提供了一种统一的UI优化方案。

2 Fragment的使用

Fragment在使用过程中有两种,支持包和本地Android开发包;

Fragment如何使用?Android系统是如何引入Fragment的?

和Activity中的使用相同,可以使用XML文件和代码来创建UI布局;更好的方式采用填充XML文件的方式来设计Fragment UI布局。

和Activity不同的是,Fragment不需要在manifest.xml进行注册。因为Fragment只有嵌入到一个Activity时,才能够存在,其生命周期也依赖于所嵌入的Activity。

3 Fragment生命周期

Fragment包含了一系列和Activity相类似的事件处理回调方法。当Fragment被创建、启动、恢复、暂停、停止和销毁时,这些事件处理程序就会被触发。Fragment还包含了一些额外的callback,用来标识:Fragment和它的父Activity之间的绑定和解绑定关系、Fragment的View层次的创建(和销毁)情况,以及它的父Activity的创建过程的完成情况。

package com.demo;
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class FragmentDemo extends Fragment {
@Override
public void onAttach(Activity activity) {
// Fragment嵌入到父Activity上
super.onAttach(activity);
}
@Override
public void onCreate(Bundle savedInstanceState) {
// 初始化Fragment
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// 创建或填充Fragment的UI,并返回该View对象
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// 父Activity和Fragment的UI都被创建,则调用该方法
super.onActivityCreated(savedInstanceState);
// Fragment的View被完全填充后执行
}
@Override
public void onStart() {
// 可见生命周期开始,Fragment可见
super.onStart();
}
@Override
public void onResume() {
// 活动生命周期开始,恢复所有暂停的Fragment需要的UI更新、线程或进程
super.onResume();
}
@Override
public void onPause() {
// 暂停UI更新,挂起线程或者暂停那些不需要更新的CPU处理
super.onPause();
}
@Override
public void onSaveInstanceState(Bundle outState) {
// 保存UI状态变化,Bundle实例会传递到onCreate、onCreateView和onActivityCreate
super.onSaveInstanceState(outState);
}
@Override
public void onStop() {
// 可见生命周期结束,Fragment不可见时,暂停其余的UI更新、挂起线程或者暂停不再需要的处理
super.onStop();
}
@Override
public void onDestroyView() {
// Fragment的View被分离和销毁
super.onDestroyView();
}
@Override
public void onDestroy() {
// 清除所有的资源,包括结束线程和关闭数据库连接等
super.onDestroy();
}
@Override
public void onDetach() {
// Fragment从父Activity上分离
super.onDetach();
}
}

Fragment特有的生命周期事件有哪些,和Activity的生命周期不同的是什么?

Fragment和Activity的不同之处在于,Fragment必须依赖于Activity而存在。

结对记忆:

3.1. 从父Activity中绑定和分离Fragment

Fragment完整的生命周期开始于绑定它的父Activity,结束与从父Activity上分离。与之相关的回调方法是:onAttach和onDetach。

但也可能出现的情况是:父Activity进程没有完成其全部的生命周期而被终止从而导致onDetach不会调用。

3.2. 创建和销毁Fragment

已创建的Fragment生命周期存在于首次对onCreate的调用和最终对onDestory的调用的期间。

初始化Fragment和初始化Fragment UI是不同的两个动作。

与Activity不同的是,Fragment的UI不在onCreate()中初始化。

3.3. 创建和销毁用户界面

Fragment的UI是在一套新的事件处理程序中初始化和销毁的,分别是:onCreateView和onDestoryView。

使用onCreateView来初始化Fragment:填充UI、获取包含的View的引用,然后创建所需要的Service和Timer。

如果Fragment需要和父Activity交互,需要等到onActivityCreated事件触发。

Fragment的状态变化情况是怎样的?

和Activity一样,当Fragment所属的Activity处在前台并拥有焦点时,这些Fragment也是活动的。Activity的状态会传递到其上的Fragment上。当Activity和Fragment紧密绑定在一起时,使用Fragment来构建Activity UI的优势是,可以灵活地动态从一个活动的Activity上添加或删除Fragment。因此,每个Fragment可以在它的父Activity的活动的生命周期内,多次贯穿自己完整的、可见的和活动的生命周期。

4 Fragment Manager

每个Activity都包含一个Fragment Manager来管理它所包含的Fragment。

    FragmentManager fragmentManager = getFragmentManager();

5. FragmentTransaction

FragmentManager管理Fragment是通过FragmentTransaction实现的。

运行时Fragment Transaction可以用来在一个Activity内添加、删除和替换Fragment。使用Fragment Transaction,可以让布局成为动态的。

6. Fragment相关的动画

Fragment在切换时,可以为之设置动画效果。

7. Fragment常用类

Android SDK包含了许多Fragment的子类,这些子类封装了最常见的Fragment实现。

ListFragment:通过绑定数据源呈现一个ListView作为它主要的UI展示方式。

WebViewFragmetn:在Fragment内封装了一个WebView。

Fragment概述的更多相关文章

  1. 札记:Fragment基础

    Fragment概述 在Fragment出现之前,Activity是app中界面的基本组成单位,值得一提的是,作为四大组件之一,它是需要"注册"的.组件的特性使得一个Activit ...

  2. Android 进阶 Fragment 介绍和使用 (一)

    Fragment概述 Fragment是activity的界面中的一部分或一种行为.你可以把多个Fragment们组合到一个activity中来创建一个多面界面并且你可以在多个activity中重用一 ...

  3. fragment做成选项卡,tab效果。 fragment+RadioGroup

    fragment做成选项卡,tab效果. fragment+RadioGroup from://http://blog.csdn.net/zimo2013/article/details/122393 ...

  4. Android学习——Fragment静态加载

    从今天开始做一套安卓的学习笔记,开发环境是Android Studio,把学习过程中的知识和遇到的问题都写在这里,先从Fragment开始学起. Fragment概述 Fragment是Android ...

  5. Android Fragment——详细解释

    1.Fragment概述 在一个Activity中. Fragment代表UI的一个部分或者一个行为.一个Activity能够结合多个Fragment对象,也能够在多个activity中使用同样Fra ...

  6. Android零基础入门第84节:引入Fragment原来是这么回事

    随着大众生活水平的提高,再加上移动互联网的迅速发展,几乎每个人都至少拥有一台搭载Android系统的移动设备.Android设备的多样性给我们带来了很大的便捷,各Android设备拥有不同分辨率和不同 ...

  7. 安卓入门教程(十五)- Fragment,Service,WAMP下载

    Fragment概述 Fragment可以被嵌入到Activity中,一个Activity可以有多个Fragment. 创建Fragment public class MyFragment exten ...

  8. 疯狂Android讲义 - 学习笔记(四)

    Android应用通常有多个Activity,多个Activity组成Activity栈,当前活动的Activity位于栈顶.Activity相当于Java Web开发的Servlet.当Activi ...

  9. Android_Fragment_Fragment具体解释

    Android_Fragment_Fragment具体解释 分类: Android基础2013-10-03 08:23 92人阅读 评论(0) 收藏 举报 AndroidFragmentFragmen ...

随机推荐

  1. bzoj3051[WC2013]平面图(树上倍增+平面图转对偶图+扫描线)

    简要题意:二维平面上n个点,点之间有一些连线,连线不在点之外的地方相交,将平面分为若干个区域.给出一些询问点对,问从这个点所在的区域走到另一个点所在的区域的最小代价. 题解:这道题首先可以把平面图转对 ...

  2. Vue, React, AngularJS, Angular2 我们对流行JavaScript框架们的选择

    转自<奇舞周刊>,好文章mark一下 分割线 一个有趣的事实是:IBM发表的2017年最值得学习的编程语言名单中,JavaScript榜上有名.这位IT巨头指出,JS在网站中惊人地达到94 ...

  3. python中的装饰器迭代器生成器

    装饰器: 定义:本质是函数(装饰其它函数) 为其它函数添加附加功能 原则: 1 不能修改被装饰函数源代码    2 不修改被装饰函数调用方式 实现装饰器知识储备: 1 函数即‘’变量‘’ 2 高阶函数 ...

  4. MyBatis小问题(1)-Mapper中错误No constructor found...

    前两天又被公司叫去修改其他产品的一些问题了,没有看java相关的,今天周六,看了看MyBatis东西. 就是简单的在MySql中建了个users表,很简单,包含id,name,age,写了个bean. ...

  5. platform驱动分离

    目录 platform驱动分离 框架结构 与输入子系统联系 设备描述 驱动算法 注册机制 程序 测试 platform驱动分离 框架结构 与输入子系统联系 设备描述 驱动算法 注册机制 程序 测试 - ...

  6. Maven 学习总结 (二) 之 生命周期与插件

    五.生命周期与插件 1.Maven有三套独立的生命周期:clean.default和site. clean生命周期的目的是清理项目,default生命周期的目的是构建项目,site生命周期的目的是建立 ...

  7. 中间件方法必须返回Response对象实例(tp5.1+小程序结合时候出的问题)

    前言:在最近开发小程序通过中间件检查是否携带token时候报的一个错误 解决方法: 根据手册中需要return出去才可以不报错

  8. Resources (being shared)

    论文下载求助论坛 数学杂志的模版 答辩PPT模版 发一篇文章的经历 数学期刊名称缩写 英文书籍下载 英文书籍下载 中文书籍下载 数学分析高等代数考研试题官方下载地址

  9. webpack学习记录

    webpack 中文网站  https://webpack.docschina.org/ webpack1 有编译打包 模块热更新 代码分割 文件处理功能 webpack2 tree Shaking( ...

  10. python的wxpython包

    1,wxpython包简介 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面. wxpython这个包就可以被用 ...