zoukankan      html  css  js  c++  java
  • Fragment概述

    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。

  • 相关阅读:
    Win11安装跳过TPM的方法 Win11安装怎么跳过TPM
    选取文件,列举文件(含子文件夹),记录大小信息,限制文件层级
    选取文件夹,枚举文件及子文件夹
    数据库SQL中having和where的用法区别
    Environ 函数调用系统环境变量 电脑用户名等
    Notepad++正则表达式语法
    VB几种函数参数传递方法,Variant,数组,Optional,ParamArray
    Access导出到Excel方法汇总
    VBA编程自动导出生成Excel表
    LeetCode 136 只出现一次的数字
  • 原文地址:https://www.cnblogs.com/CVstyle/p/6390001.html
Copyright © 2011-2022 走看看