Fragment是android3.0后提供的API(所以android:minSdkVersion="11"以上版本),主要针对平板UI。有自己的生命周期,但是必须依附在Activity上,当Activity销毁后,Fragment也销毁。

注意,在使用Fragment的Activity必须要继承FragmentActivity.

1 生命周期

  Fragment

  -> onInflate()         //该方法只在我们直接用标签在布局文件中定义的时候才会被调用

  -> onAttach()         //当Fragment被添加到Activity中,只调用一次

  -> onCreate()          //创建Fragment,只会被调用一次

  -> onCreateView()       //每次创建,绘制该Fragment的View组件时,会将显示的View返回

  -> onActivityCreated()       //当Fragment所在的Activity启动完成

  -> onStart()          //启动Fragment被回调

  -> onResume()-> running   // 恢复Fragment,onStart()后,

  -> onPause()->pause    // Activity转到后台、Fragment被删除/替换、Fragment被添加到Back栈

  -> onStop()->stop       // 停止Fragment时回调

  -> onDestoryView()  // 销毁Fragment包含的View,如果此时从Back栈回滚到前台,会调用onCreateView()生命周期方法。

  -> onDestory()    // 销毁Fragment时

  -> onDetach()     // Fragment从Activity被删除/替换完成后回调该方法,onDestory()后肯定会执行此方法

  -> finish

2 使用方式

  首先需要定义XML布局文件,此布局文件为Fragment子类的onCreateView()方法中加载。

  然后自定义Fragment类,继承Fragment或其子类,实现onCreateView()方法,在方法中通过inflater.inflate()方法加载xml布局文件。

  

2.1 静态声明

    <1>  在需要加载Fragment的Activity的布局文件中,使用自定义Fragment标签,标签属性中: android:name="package.MyFragment"

    <2>  在setContentView()加载布局文件

  

2.2 动态代码

    <1>  获取FragmentManager实例,

    通过getFragmentManager()/getSupportFragmentManager(); (两种获取实例的差异在于Fragment相关类使用的是android.app包还是android.support.v4.app包)

    <2>  获取FragmentTransaction实例,fm.beginTransaction();

    <3>  调用add()/replace()方法加载Fragment( add(容器,fragment实例)、replace(viewId,fragment实例) )。

    <4>  调用fm.commit()方法提交事务。

3 Fragment管理和事务

  

3.1 Fragment管理

    Activity管理Fragment主要依靠FragmentManager

    findFragmenetById()       //获取指定Fragment

    popBackStack()         //弹出栈

    addToBackStack()         // 加入栈

    addOnBackStackChangedListener() // 监听后台栈变化    

  

3.2 Fragment事务

    Fragment事务需要FragmentTransaction。

    FragmentTransaction ft = fm.beginTransaction();

    ft.add()

    ft.replace()

    ft.remove()

    ft.commit(); //最后需要提交事务

4 交互

  

4.1 获取组件

    <1> Fragment获取Activity中组件 :getActivity().findViewById(R.id.viewID);

    <2> Activity获取Fragment中组件 :getFragmentManager.findFragmentById(R.id.fragmentID); (也可以是用tag : findFragmentByTag())

  

4.2 数据交互

    4.2.1 Activity -> Fragment
      在Activity中创建Bundle数据包,使用Fragment实例调用setArguments(bundle)将数据包传递给Fragment,Fragment中,调用getArguments()获得Bundle对象

    4.2.2 Fragment -> Activity

      在Fragment中定义一个回调接口,在Activity中实现接口,Fragment通过回调方法传递数据给Activity

      <1> fragment中代码:

        /*接口*/ 
        public interface CallBack{
        /*定义一个获取信息的方法*/
          public void getResult(String result);
        }
        /*接口回调*/
        public void getData(CallBack callBack){
        /*获取文本框的信息,当然你也可以传其他类型的参数,看需求咯*/
        String msg = editText.getText().toString();
        callBack.getResult(msg);
        }
    

      <2> Activity中代码:

        /* 使用接口回调的方法获取数据 */

        leftFragment.getData(new CallBack() {

          @Override

          public void getResult(String result) {

            /*打印信息*/

            Toast.makeText(MainActivity.this, "-->>" + result, 1).show();

          }

        });    

    

4.2.3 Fragment -> Fragment

     可以使用Activity为媒介,先从F1中得到数据,然后传入F2中。

Android基础知识 -- Fragment的更多相关文章

  1. 【Xamarin开发 Android 系列 4】 Android 基础知识

    原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...

  2. 【Android基础】Fragment 详解之Fragment生命周期

    上一篇文章简单介绍了一下Fragment,这一篇文章会详细的说一下Fragment的生命周期和创建一个用户界面. Fragment的主要功能就是创建一个View,并且有一个生命周期来管理这个View的 ...

  3. Android基础知识(一)

    前言 前言 从软件测试最终目的发现问题缺陷来看,Findyou比较认同一个观念,测试的能力大致可以划分成三个能力层次:发现问题.定位问题.预防问题.有机会探讨一下这个分类. 发现问题各种方式方法,比如 ...

  4. Android基础知识巩固:关于PendingIntent和广播

    平时使用广播的场合比较多,但细节的东西,看过了也没有总结,以至于某些场合有小问题,还是要把原理和属性搞清楚才能运用自如. 其实也是自己比较懒,先看别人的blog,有个概念再去官网看英文的能好理解一些. ...

  5. Android基础知识大全(精品)

    [1].ProgressBar   <ProgressBar android:id="@+id/progress_bar" android:layout_width=&quo ...

  6. <Android基础> (四) Fragment Part 2

    4.3 Fragment的生命周期 4.3.1 Fragment的状态和回调 1.运行状态 当一个Fragment是可见的,并且它关联的活动正处于运行状态是,该Fragment也处于运行状态 2.暂停 ...

  7. <Android基础>(四) Fragment Part 1

    Fragment 1)Fragment的简单用法 2)动态添加Fragment 3)在Fragment中模拟返回栈 4)Fragment和活动之间通信 第四章 Fragment Fragment是一种 ...

  8. android开发学习---linux下开发环境的搭建&& android基础知识介绍

    一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...

  9. Android基础——使用Fragment适应不同屏幕和分辨率

    最近事情很忙,一个新项目赶着出来,但是很多功能都要重新做,一直在编写代码.Debug.今天因为一个新程序要使用Fragment来做,虽然以前也使用过Fragment,不过没有仔细研究,今天顺道写篇文章 ...

随机推荐

  1. Selenium实战(四)——unittest单元测试2(断言方法+discover()多测试用例的执行)

    一.断言方法 方法 检查 版本 assertEqual(a,b) a==b   assertNotEqual(a,b) a!=b   assertTrue(x) bool(x) is True   a ...

  2. NIM游戏的Python实现

    可执行程序下载: 链接:https://pan.baidu.com/s/1xQedrWRBsqQRZvOe91Rvng 提取码:goi9 Nim游戏是博弈论中最经典的模型(之一),它又有着十分简单的规 ...

  3. exsi 6.7u2 不能向winows虚拟机发送ctrl+alt+del

    1. 遇到过可以安装它的浏览器插件启动控制台登录就可以了. 2. 下载官方的客户机远程工具“VMware vSphere Client”才行. 3. 直接选择alt+del+insert 键盘即可代替 ...

  4. Android 存档最优选项

    1 开发环境:VS2019最新版本(16.4.5) 2  存档最优选项 说明:apk包70M(默认选项),apk包12M(调整后选项) 位置:Android 选项

  5. C语言 小技巧函数方法总结

    1.使用^(异或) 不引入第三变量交换两个变量的值. /* 交换 int a 和 int b 的值*/ #include <stdio.h> int main(int argc, char ...

  6. goland设置go module

    goland版本2019.3.2 go版本1.14 网上一大堆乱七八糟的什么破文章,讲了半天都没讲清这个go module怎么实际运用,真滴烦躁,一giao我哩giaogiao!!!!! 这边我直接介 ...

  7. 曼孚科技:数据标注,AI背后的百亿市场

    ​ 1. 两年前,来自山东农村的王磊成为了一位数据标注员.彼时的他,工作内容非常简单且枯燥:识别图片中人的性别. 然而,一段时间之后,他注意到分配给他的任务开始变得越来越复杂:从识别性别到年龄,从框选 ...

  8. [Python]python已经安装了jieba库,Pycharm无法使用的问题

    这个问题是Pycharm解释器的问题, 打开file--->setting---> 在如图所示界面点击add 在弹出的页面中选择python3的安装路径,可以用win10的搜索打开文件位置 ...

  9. LaTeX技巧008:如何给文字添加阴影效果?

    大家可以使用这个包:shadowtext宏包

  10. [ZJOI2011] 最小割 - 最小割树

    最小割树裸题 建树后,以每个点为根跑DFS求出距离矩阵,然后暴力回答询问即可 #include <bits/stdc++.h> using namespace std; #define i ...