fragment简介
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简介相关推荐
- Fragment专辑(一):Fragment简介
Fragment是android中非常常用的控件之一,他可以帮助开发者实现类似于局部刷新的功能,这样与用户的交互更加简单,一个界面可以展示更多更丰富的内容,而且局部刷新可以节省刷新界面的时间和内存消耗 ...
- 第三章:Activity简介和Fragment应用
Activity的生命周期 Activity是由Activity栈进管理,当来到一个新的Activity后,此Activity将被加入到Activity栈顶,之前的Activity位于此Activit ...
- Android中的Fragment
文章目录 1 Fragment简介 1.1 设计思想 1.2 Fragment和Activity的区别 2 Fragment的生命周期 3 Fragment的静态加载和动态加载 3.1 Fragmen ...
- android使碎片切换界面,玩转Android中的碎片Fragment
引言:在Android开发中,我们都知道一些界面的展示经常会用到的就是Activity,但是Activity存在着很大的局限性,比如说手机上的界面显示在平板上面就会发生各种变形的问题,Activity ...
- Android Fragment 从源码的角度去解析(上)
###1.概述 本来想着昨天星期五可以早点休息,今天可以早点起来跑步,可没想到事情那么的多,晚上有人问我主页怎么做到点击才去加载Fragment数据,而不是一进入主页就去加载所有的数据,在这里自己就对 ...
- Fragment的基本用法
一.Fragment简介 碎片是一种可以嵌在Activity中的UI片段,是一个小型的Activity,又称Activity片段. Fragment并不能单独使用,需要嵌套在Activity中使用.尽 ...
- Android基础之Fragment
目录 前言 一.Fragment简介 二.Fragment的基础使用 1.创建Fragment 2.在Activity中加入Fragment (1)在Activity的layout.xml布局文件中静 ...
- Kotlin开发第四天,探究Fragment
完整代码Gitee地址:kotlin-demo: 10天Kotlin学习计划 第四天学习内容代码:Chapter4 目录 Fragment简介 知识点1:Fragment生命周期 知识点2:TabLa ...
- android的fragment添加列表,Android之listfragment的使用例子
1.fragment简介 我对fragment的理解是基于activity的,对于大多数的基本开始发时,我们最先遇到的就是用activity来开发. 简单的例子,新建一个最基本的Android空白界面 ...
最新文章
- linux无人值守安装
- 深入理解多线程(一)——Synchronized的实现原理
- 河南理工大学新生挑战赛【部分题题解】
- 让Apache支持Wap网站
- csh shell_一篇文章从了解到入门shell
- 【网络与系统安全实验】欺骗攻击及防御技术
- 执行shellcode一直提示illegal instruction
- Visual studio 2017 安装
- 二阶常系数非齐次线性微分方程特解的设定规则
- js Console 对象 - Kaiqisan
- 公开课|7月15日“隐私计算+区块链”安全解锁数据价值
- 徐无忌MySQL笔记:案例实战:如何实现MySQL数据库的读写分离?
- java计算机毕业设计智慧校园学生选宿系统源码+mysql数据库+系统+部署+lw文档
- html给列表中每一行设置背景,教程丨如何设置内容的背景
- Linux如何识别U盘
- 信道均衡-ZF迫零均衡matlab实现
- 邦纳Q4XTBLAF300-Q8传感器
- AM335x Linux uart 串口(rs485rs232)无法正常通信的一种解决方法
- ccf--20150303--节日
- nod-1640-天气晴朗的魔法