Fragment

文章目录

  • Fragment
    • 1、什么是Fragment
    • 2、为什么要有Fragment
    • 3、Fragment有什么优点
    • 4、Fragment的生命周期
    • 5、Fragment使用的一些方法
      • **1.将 fragment添加到Activity的两种方式**
        • a.静态注册:以标签的形式添加到Activity的布局当中。
        • b.动态注册:通过java代码将fragment添加到已存在的宿主Activity中
      • **2.Fragment与Activity的交互**
        • a.组件获取
        • b.数据传递

1、什么是Fragment

​ 1.Fragment是Android3.0开始新增的概念,意为碎片、片段。 Fragment是依赖于Activity的,不能独立存在的。

2、为什么要有Fragment

​ 1.Android运行在各种各样的设备中,有小屏幕的手机,还有大屏幕的平板,电视等。同样的界面在手机上显示可能很好看,在大屏幕的平板上就未必了,手机的界面放在平板上可能会有过分被拉长、控件间距过大等情况。针对屏幕尺寸的差距,Fragment的出现能做到一个App可以同时适应手机和平板。这就是为什么要有Fragment的原因。

3、Fragment有什么优点

1.Fragment可以将Activity分离成多个可重用的组件,不需要把代码都写到Activity中,且每个Fragment都有它自己的生命周期和UI。

2.Fragment可以轻松得创建动态灵活的UI设计,可以适应于不同的屏幕尺寸。从手机到平板电脑。

3.Fragment是一个独立的模块,紧紧地与Activity绑定在一起。可以在Activity运行中动态地移除、加入、交换等。

4.Fragment 切换流畅,轻量切换。

5.Fragment 在4.2.版本中新增嵌套fragment使用方法,能够生成更好的界面效

总结起来就是模块化,可重用,可适配

4、Fragment的生命周期

  • Activity加载Fragment的时候,依次调用下面的方法: onAttach -> onCreate -> onCreateView -> onActivityCreate -> onStart ->onResume
  • 当我们弄出一个悬浮的对话框风格的Activity,或者其他,就是让Fragment所在的Activity可见,但不获得焦点 onPause
  • 当对话框关闭,Activity又获得了焦点: onResume
  • 当我们替换Fragment,并调用addToBackStack()将他添加到Back栈中 onPause -> onStop -> onDestoryView !!注意,此时的Fragment还没有被销毁哦!!!
  • 当我们按下键盘的回退键,Fragment会再次显示出来: onCreateView -> onActivityCreate -> onStart -> onResume
  • 如果我们替换后,在事务commit之前**没有调用addToBackStack()**方法将 Fragment添加到back栈中的话;又或者退出了Activity的话,那么Fragment将会被完全结束, Fragment会进入销毁状态 onPause -> onStop -> onDestoryView -> onDestory -> onDetach

5、Fragment使用的一些方法

1.将 fragment添加到Activity的两种方式

a.静态注册:以标签的形式添加到Activity的布局当中。

b.动态注册:通过java代码将fragment添加到已存在的宿主Activity中

​ 1.FragmentManager:用来管理Activity中的fragment,app包中使用getFragmentManager() v4包中getSupportFragmentManager

​ 2.FragmentTransaction:事务,用来添加,移除,替换fragment,FragmentTransaction transaction = fm.benginTransatcion();//开启一个事务

​ 3.transaction.add() :往Activity中添加一个Fragment

​ 4.transaction.remove() :从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈,这个Fragment实例将会被销毁。

​ 5.transaction.replace():使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体~

​ 6.transaction.hide():隐藏当前的Fragment,仅仅是设为不可见,并不会销毁

​ 7.transaction.show():显示之前隐藏的Fragment

​ 8.transaction.commit():提交一个事务

​ 9.detach():会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。

2.Fragment与Activity的交互

a.组件获取

​ 1.Fragment获得Activity中的组件: getActivity().findViewById(R.id.list);

​ 2.Activity获得Fragment中的组件(根据id和tag都可以): getFragmentManager.findFragmentByid(R.id.fragment1);

b.数据传递

​ 1. Activit传递数据给Fragment:在Activity中创建Bundle数据包,调用Fragment实例的setArguments(bundle) 从而将Bundle数据包传给Fragment,然后Fragment中调用getArguments获得 Bundle对象,然后进行解析就可以了

​ 2. Fragment传递数据给Activity :在Fragment中定义一个内部回调接口,再让包含该Fragment的Activity实现该回调接口, Fragment就可以通过回调接口传数据了

定义一个回调接口

/*接口*/
public interface CallBack{  /*定义一个获取信息的方法*/  public void getResult(String result);
}

接口回调(Fragment中)

/*接口回调*/
public void getData(CallBack callBack){  /*获取文本框的信息,也可以传其他参数*/ String msg = editText.getText().toString();  callBack.getResult(msg);
}

使用接口回调方法读数据(Activity中)

/* 使用接口回调的方法获取数据 */
leftFragment.getData(new CallBack() {  @Override  public void getResult(String result) {              /*打印信息*/Toast.makeText(MainActivity.this, "-->>" + result, 1).show();  }});

​ 3. Fragment与Fragment之间的数据互传:找到需要接收数据的Fragment对象直接调用setArguments传数据就行了

FragmentManager fManager = getSupportFragmentManager( );
FragmentTransaction fTransaction = fManager.beginTransaction();
Fragmentthree t1 = new Fragmentthree();
Fragmenttwo t2 = new Fragmenttwo();
Bundle bundle = new Bundle();
bundle.putString("key",id);
t2.setArguments(bundle);
fTransaction.add(R.id.fragmentRoot, t2, "~~~");
fTransaction.addToBackStack(t1);//接收一个名字返回栈的状态
fTransaction.commit();

fragment简介相关推荐

  1. Fragment专辑(一):Fragment简介

    Fragment是android中非常常用的控件之一,他可以帮助开发者实现类似于局部刷新的功能,这样与用户的交互更加简单,一个界面可以展示更多更丰富的内容,而且局部刷新可以节省刷新界面的时间和内存消耗 ...

  2. 第三章:Activity简介和Fragment应用

    Activity的生命周期 Activity是由Activity栈进管理,当来到一个新的Activity后,此Activity将被加入到Activity栈顶,之前的Activity位于此Activit ...

  3. Android中的Fragment

    文章目录 1 Fragment简介 1.1 设计思想 1.2 Fragment和Activity的区别 2 Fragment的生命周期 3 Fragment的静态加载和动态加载 3.1 Fragmen ...

  4. android使碎片切换界面,玩转Android中的碎片Fragment

    引言:在Android开发中,我们都知道一些界面的展示经常会用到的就是Activity,但是Activity存在着很大的局限性,比如说手机上的界面显示在平板上面就会发生各种变形的问题,Activity ...

  5. Android Fragment 从源码的角度去解析(上)

    ###1.概述 本来想着昨天星期五可以早点休息,今天可以早点起来跑步,可没想到事情那么的多,晚上有人问我主页怎么做到点击才去加载Fragment数据,而不是一进入主页就去加载所有的数据,在这里自己就对 ...

  6. Fragment的基本用法

    一.Fragment简介 碎片是一种可以嵌在Activity中的UI片段,是一个小型的Activity,又称Activity片段. Fragment并不能单独使用,需要嵌套在Activity中使用.尽 ...

  7. Android基础之Fragment

    目录 前言 一.Fragment简介 二.Fragment的基础使用 1.创建Fragment 2.在Activity中加入Fragment (1)在Activity的layout.xml布局文件中静 ...

  8. Kotlin开发第四天,探究Fragment

    完整代码Gitee地址:kotlin-demo: 10天Kotlin学习计划 第四天学习内容代码:Chapter4 目录 Fragment简介 知识点1:Fragment生命周期 知识点2:TabLa ...

  9. android的fragment添加列表,Android之listfragment的使用例子

    1.fragment简介 我对fragment的理解是基于activity的,对于大多数的基本开始发时,我们最先遇到的就是用activity来开发. 简单的例子,新建一个最基本的Android空白界面 ...

最新文章

  1. linux无人值守安装
  2. 深入理解多线程(一)——Synchronized的实现原理
  3. 河南理工大学新生挑战赛【部分题题解】
  4. 让Apache支持Wap网站
  5. csh shell_一篇文章从了解到入门shell
  6. 【网络与系统安全实验】欺骗攻击及防御技术
  7. 执行shellcode一直提示illegal instruction
  8. Visual studio 2017 安装
  9. 二阶常系数非齐次线性微分方程特解的设定规则
  10. js Console 对象 - Kaiqisan
  11. 公开课|7月15日“隐私计算+区块链”安全解锁数据价值
  12. 徐无忌MySQL笔记:案例实战:如何实现MySQL数据库的读写分离?
  13. java计算机毕业设计智慧校园学生选宿系统源码+mysql数据库+系统+部署+lw文档
  14. html给列表中每一行设置背景,教程丨如何设置内容的背景
  15. Linux如何识别U盘
  16. 信道均衡-ZF迫零均衡matlab实现
  17. 邦纳Q4XTBLAF300-Q8传感器
  18. AM335x Linux uart 串口(rs485rs232)无法正常通信的一种解决方法
  19. ccf--20150303--节日
  20. nod-1640-天气晴朗的魔法

热门文章

  1. [生物工程与基因]安徒生童话-海的女儿
  2. 图的最短路径--单源、多源最短路径
  3. 解决定位螺丝孔连接铜皮问题
  4. Ontology References
  5. 【微信小程序】-—下拉刷新、上拉触底事件详细讲解
  6. java enum 重写_重写enum的valueof方法等
  7. 杨:联想的创新将成为打造最酷的助推力的重要器件
  8. 腾讯云服务器标准型SA2具体信息
  9. 基于Android studio健身器材维修预约系统java
  10. 如何在SQL中设置自动编号