一些关于Fragment的笔记

Fragment——小白实训笔记 Fragment ** *1. 什么是Fragment? Fragment可以叫为“片段”或“碎片”,表示Activity中的行为或用户界面部分。我们可以在一个Activity中用多个Fragment组合来构建多窗格。 2. 用Fragment解决什么问题? 使用Fragment可以在一个Activity中实现不同界面的灵活切换。 当一款APP同时推出手机版和Pad版,不需要再... 阅读详情

——部分资源摘自网络——

android3.0以及之后的版本支持fragment技术,低版本要想使用fragment技术需要android.support.v4.app包
获取fragmentManager的方法不同:
3.0以下:getSupportFragmentManager()
3.0以上:getFragmentManager()

fragment的生命周期与activity的关系如图:

fragment生命周期

学习fragment时碰到的几个名词:

FragmentActivity:

一个android.support.v4.app中的一个继承了Activity的类,如果你要在3.0以下使用fragment就需要让页面继承FragmentActivity而不是Activity,FragmentActivity中包含了3.0以下操作fragment的方法,使用方法同3.0以上一样,只是获取Manager的方法不同

FragmentPagerAdapter

可以作为ViewPager的适配器

ListFragment

列表样式, 自带一个默认的包含ListView控件的布局文件,无需手动重写onCreateView()使用inflat()方法加载自定义布局文件,只需要重写onCreate()方法,在其中用setListAdapter()方法绑定适配器,在绑定适配器的时候给item设置一个布局文件就行了。
若想修改ListView,可以在onCreateView(LayoutInflater, ViewGroup, Bundle)中进行修改,需要注意在自定义的ListFragment对应的布局文件中,必须指定一个 android:id 为 “@android:id/list” 的ListView控件!
当然,用户也可以在ListFragment对应的布局中包含其它的控件。
显示:在主activity中使用new关键字获取对象的引用

DialogFragment

Android官方推荐使用DialogFragment创建对话框,可以避免屏幕旋转导致的问题。
重写onCreateView()则用定义的xml布局文件展示Dialog或者重写onCreateDialog()则需要利用AlertDialog或者Dialog创建出Dialog,在主activity中使用DialogFragment对象的show()方法,显示对话框。
显示:在主activity中使用new关键字获取对象的引用

FragmentTabHost

用来代替已废弃的TabHost,个人感觉和前两个ListFragment以及DialogFragment有些不同,你可以把FragmentTabHost看作是一个普通控件正常使用,也就是个TabHost使用方法一样。
需要主页面的布局文件中添加控件,然后通过findViewById()来获取控件,需要注意的是布局文件中控件使用的标记名称是<android.support.v4.app.FragmentTabHost>,id:@android:id/tabhost(id可以随便写)
需要包含三个子标记(经过测试,只用一个id:tabhost(也就是上面那个控件)和一个id:realtabconten也可以(真正的容器FrameLayout):
1、Tab标签容器TabWidget,id:@android:id/tabs(id必须是这个)
2、Tab内容容器FrameLayout,id:@android:id/tabcontent(id必须是这个),注意:这里属性中宽高皆为0dp
3、Tab内容容器FrameLayout,id:@+id/RealTabContent(id可以随便写),注意:这个才是真正的内容容器

FragmentTabHost可以在布局文件中定义标签容器在内容容器的下面,调动RealTabContent的位置到tabhost的上面就行了,此时RealTabContent的属性最好是:

android:id="@+id/RealTabContent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"

相关链接:《关于FragmentTabHost中TabWidget不能移到屏幕下面的Bug》

然后,在主activity中使用findViewById()获取控件后,必须先使用使用控件对象的setup()方法之后才能用addTab()方法来添加标签,这点和TabHost一样,不过使用的具体方法有区别,FragmentTabHost应该用:

//setup():
setup(Context context, FragmentManager manager, int containerId)
//参数解释:
//context:上下文
//manager:使用getSupportFragmentManager()
//containerId:容器id
//×××××××××××××××××××××××××××××××××××××××××
//add()
addTab(TabSpec arg0, Class<?> arg1, Bundle arg2)
//参数解释:
//arg0:FragmentTabHost对象的newTabSpec()方法获取,并且需要使用获取到的TabSpec对象的setIndicator()方法设置标题属性
//arg1:具体的fragment类(不是new出来的)
//arg2:null即可

详细的FragmentHostTab与HostTab之间的区别请看:TabHost 和 FragmentTabHost

笼统的Fragment的使用:

只是单纯的Fragment,不含:ListFragment,DialogFragment,FragmentTabHost等,不过基本一样

fragment继承类和其布局文件

一个fragment由一个布局文件和一个继承了fragment的子类组成,由这个子类处理布局文件产生的的各种事件

使用时需要让子类关联到其布局文件,关联方法:
1、重写fragment类的onCreateView()生命周期方法,
2、然后在onCreateView()中调用方法的传入参数inflater的inflate()方法并返回获得的View对象来加载对应的布局文件

当fragment继承类和其布局文件关联后就可以显示到页面上了,显示方法:
注意:并不是直接把fragment的布局文件或其中的控件显示到页面上
而是在主页面的布局文件中使用fragment标记,要注意标记的android:name属性,由这个属性的值关联到fragment继承类,进而通过fragment继承类加载到相应的fragment布局文件

具体显示到页面上有两种方式:

静态

也就是直接把一个或多个fragment显示到页面上,这样做就相当与把一个fragment看作是一个普通控件(由一个或多个控件组成的控件)来添加到页面上
只不过这个“控件“(fragment)产生的事件由对应的继承了fragment的类处理,
而不是像平时那样在主页面中为某个控件findViewById然后添加监听器,这一步写在了继承了fragment的类中

具体步骤:
1、fragment的布局文件,就像平时的布局文件一样
2、继承了fragment的类,重写fragment类的onCreateView()生命周期方法,
在onCreateView()中调用方法的传入参数inflater的inflate()方法并返回获得的View对象来加载对应的布局文件
3、主页面布局文件中依次写入需要显示的fragment标记,通过标记的name属性关联到继承了fragment的类

动态

动态的意思就是可以在不切换activity的前提下,通过某个点击事件,在同一个区域显示不同的fragment
要实现这个效果,需要一个FragmentManager管理类和一个FragmentTransaction事务类,还需要一个承载不同fragment的容器,一般是在主页面中使用一个FrameLayout帧布局来充当这个容器,
也就是让一个个fragment在FrameLayout中显示,但不需要在FrameLayout内写fragment子标记
如何切换不同的fragment的方法由事务类操作实现

具体步骤:
前两步与静态一样,写几个fragment的布局文件和类并一一对应的关联起来
3、在主页面的布局文件中,需要动态显示fragment的地方,放一个FrameLayout帧布局
4、在主页面的activity类中,通过getFragmentManager()方法获取到FragmentManager
并通过FragmentManager的beginTransaction()开始并获取到一个事务FragmentTransaction
5、通过获取到的FragmentTransaction对象的就可以控制fragment显示显示或隐藏到FrameLayout帧布局

部分控制方法有:
add(),hide(),remove(),replace(),show()等,这些方法都需要fragment对象,也就是要显示的fragment
通过addToBackStack()方法可以将当前fragment添加到FragmentManager的回退栈,当点击返回键时可以恢复状态
当操作完成后还必须使用commit()方法提交,提交之后才会真正生效

总结:
个人表示刚接触fragment,不容易懂或者说不容易记的地方是fragment的类和对应的布局文件的关联,以及如何显示到页面

大概记忆顺序(中间的连接符可以理解为关联、对应):
静态:一个主页面布局文件中的<fragment>标记——一个fragment的继承类——一个fragment布局文件
动态:一个主页面布局文件中的<FrameLayout>标记——承载多个fragment的继承类——各自对应的多个fragment布局文件

虽然理解时的顺序是这样的,但实际写代码的时候的顺序确实反过来的

——如有错误请回复指出——

PHP实战:5分钟搞定SM4国密加密算法集成(附完整代码) 本文详细介绍了如何在PHP项目中快速集成SM4国密加密算法,提供完整的代码实现和实际应用示例。从算法原理到核心代码解析,再到性能优化与安全实践,帮助开发者高效实现数据加密功能,满足金融、政务等领域的合规需求。 阅读详情

相关推荐

车联网ECU、TSP与TBOX通信流程

对比维度ECU(电子控制单元)BMS(电池管理系统)应用场景传统燃油车 + 新能源汽车仅限新能源汽车核心作用控制整车各系统运行管理动力电池安全与寿命车联网角色数据采集与传输的核心载体提供电池相关的核心数据。

tecoes的博客 1234

Android中的FrameLayout帧布局

帧布局由FrameLayout所代表,FrameLayout直接继承了ViewGoup组件。 帧布局容器为每个加入其中的组件创建一个空白的区域(称为一个帧),每个子组件占据一帧,这些帧都会根据gravity属性执行自动对齐。 代码: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" and

Crazy Android 5451

2.13寸电子墨水屏HINK-E0213+esp8266

很久以前买的一块电子墨水屏,运气很好,这个型号HINK-E0213资料很全,而且微雪官网也有相关电路资料等。

梦境虽美,却不长. 3005

Android入门第十一篇之TabHost,TabWidget

Android入门第十一篇之TabHost,TabTabWidget

hellogv的专栏 4万+

DC/DC恒压输出控制原理与应用

DC/DC恒压输出控制

propor的专栏 4281

ENU坐标系实战:5分钟搞定无人机导航中的站心坐标转换

本文针对无人机导航中GPS坐标与视觉感知不匹配的定位漂移问题,提供了基于ENU坐标系的实战解决方案。通过Python代码演示了如何快速、精准地实现地心地固坐标与站心坐标之间的转换,并详细解释了转换原理、精度对比及工程优化技巧,帮助开发者从根本上解决局部相对定位不准的难题。

mqtt6iot的博客 553

Fragment详解(2)

在上一篇中我们详细介绍了Fragment的作用,使用方法,更是主要介绍了一个叫做FragmentTransaction类的主要方法。这一片中我们将把Fragment剩下的内容全部说完:Fragment退回栈介绍。Fragment与Activity通信。目测篇幅不会很长。Fragment回退栈还记得我们再说Activity时候提到的一个任务栈Task Stack吗,它的效果和Tack Stack效果...

zy_jibai 318

Autosar Os降低CPU负载的方案总结

由于各个项目的实际场景不尽相同,可能需要有针对性的对症优化。如果你还有别的一些优化手段欢迎留言交流。

3679

fragment定义Android,Android-Jetpack笔记-Navigation之Fragment支持复用

上篇文章Android-Jetpack笔记-Navigation之Fragment使用提到,每次切换目的地,fragment是反复销毁重建的,按照谷歌推荐的1个APP只需1个activity的思路开发,这样是没问题的,但是这里的fragment是作为首页的3个常驻页面,我们是希望能够保存起来的,毕竟,销毁重建需要重新请求网络数据,重新初始化view,严重影响用户体验,那么接下来继续上篇文章的分析,...

weixin_35690047的博客 457

Win10系统下AppScan 10.0.0安装破解全流程(附百度网盘资源)

本文详细介绍了在Windows 10系统上安装和配置AppScan 10.0.0进行Web漏洞扫描的完整流程。内容涵盖环境准备、分步安装、核心文件部署、许可证配置及首次扫描实践,旨在帮助开发人员和安全爱好者快速搭建专业的Web应用安全扫描环境,并提升扫描效率。

u8v9w0x1y的博客 367

Apple 网页 SRP 登录系列文章(四):Hashcash 工作量证明与完整登录流程

本文是Apple SRP登录系列文章的收官之作,重点解析了Apple独有的Hashcash工作量证明机制并展示了完整的登录流程实现。文章详细介绍了Hashcash的安全目的、格式标准、计算核心算法及难度评估方法,特别提供了Python实现代码。同时还讲解了如何动态获取服务器Hashcash参数以及建立容错机制。最后呈现了完整的Apple SRP登录主函数架构,为开发者提供了从理论到实践的全面指导。全文通过代码示例和流程分析,系统性地阐述了Apple安全登录机制的技术细节。

Sayid_Des的专栏 630

Fragment笔记

Fragment笔记Fragment的产生与介绍为什么要使用fragmentFragment的生命周期 Fragment的产生与介绍 Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板等超级大屏的。难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分,甚至 Act

fakerXuan的博客 612

《YOLOv8:从入门到实战》专栏介绍 & 专栏目录

本专栏涵盖了丰富的YOLOv8算法从入门到实战系列教程,专为学习YOLOv8的同学而设计,堪称全网最详细的教程!🌈🌈🌈

小哥谈 6491

Fragment笔记整理

转自http://www.lightskystreet.com/2015/02/02/fragment-note/ Fragment笔记整理 发表于 2015-02-01   |   分类于 Android , 性能优化   |   前言 一直在用Fragment,但是没有系统的整理过,Google了一下相关文章,看到了几篇,将几篇还不错的文章重点整理了下,很多

y394996630的专栏 699

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ViewPager2+Fragment操作笔记,【面试总结】

} else { this.parent?.requestDisallowInterceptTouchEvent(false) } } else { // TODO: 2021/4/8 目前没有实现上下滑动和 [androidx.viewpager2.widget.ViewPager2]上下滑动的冲突 } } else { handleDefaul...

m0_61418295的博客 743

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Fragment 笔记

Fragment 碎片 老一套的概念问题: Fragment是Android3.0新增的概念,中文意思是碎片,它与Activity十分相似,用来在一个Activity中描述一些行为或一部分用户界面。使用多个Fragment可以在一个单独的Activity中建立多个UI面板,也可以在多个Activity中使用Fragment。 可以把Fragment当成Activity的一个界面的一个组成部分...

Zero的博客 310

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android之Fragment实现界面切换学习笔记

Android之Fragment实现界面切换学习笔记  今天来实现一个简单的界面切换功能,关于页面的切换相信大家都非常熟悉,比如微信、QQ、支付宝等这些常用软件都会有界面切换功能,根据软件的要求不同,我们所设计的页面切换个数也会不同,今天我就写一个四个基本页面切换的小Demo,具体的代码功能都会在注释上写上。      PS:如果想和是我一样的效果,记得先把系统默认的ActionBar去掉,在头

GodV的博客 1769

Fragment学习笔记

# Fragment分析 ## 1.背景 作为一个刚刚工作不久的安卓小白,项目代码中全是Fragment,虽然一段时间接触下有了一定的了解,但始终有一些地方觉得有点懵懵懂懂的,所以打算来详细了解一下这个控件。 ## 2.博客阅读 阅读之前的几个问题: - fragment是什么,和activity有什么区别 - fragment的生命周期 - 从一个fragment A跳转至fragment B,再返回fragment A,这个过程中发生了什么 - fragment和其他控件之间的关系 - fra

sinat_31131353的博客 325

Activity中使用Fragment笔记

Activity中使用Fragment,如何避免Activity恢复时Fragment叠加问题。ViewPager中选择合适的Adapter,打造高效流畅Fragment列表。Fragment数据延时加载,保存和恢复,打造流畅高效的列表。

hwliu51的笔记 5167

ViewPager2+Fragment操作笔记

ViewPager2+Fragment操作笔记 文章目录ViewPager2+Fragment操作笔记ViewPager2简介实际操作效果RecycleView和Viewpage2的滑动冲突ViewPager2中Fragment的懒加载懒加载预加载FragmentStateAdapteronCreateViewHolderonBindViewHolderonViewAttachedToWindowFragmentStateAdapter使用获取Fragment实例异常处理ViewPager2滑动监听Tab

stven_king的专栏 2589

Fragment的学习笔记

目前在使用AS3.1版本,发现谷歌内置了各种格式的Fragment模版其中Fragment(Blank)对应空白Fragment首先看官方描述* A simple {@link Fragment} subclass.* Activities that contain this fragment must implement the* {@link BlankFragment.OnFragmen...

RungBy的博客 509

Android Fragment 笔记

1 定义Fragment:1.1 继承Fragmentpackage com.example.testproject; import android.app.Fragment; public class MyFragment extends Fragment {} 1.2 继承V4包里的Fragmentpackage com.example.testproject; import android.s

granton 801

Android入门笔记之Fragment

Android入门笔记之Fragment 简介         Fragments 设计理念       在设计应用时特别是Android 应用,有众多的分辨率要去适应,而fragments 可以让你在屏幕不同的屏幕上动态管理UI。例如:通讯应用程序(QQ),用户列表可以在左边,消息窗口在右边的设计。而在手机屏幕用户列表填充屏幕当点击某一用户时,则弹出对话窗口的设计,如下图:  Fra

NULL 1163

【Android笔记】Fragment

1.动态加载Fragment布局 重写onCreateView 用inflater.inflate()动态加载 public class RightFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa...

birdaaron的博客 199

【安卓笔记】ViewPager+Fragment布局中的Fragment数据更新

------------------------------------------------------------------------------------- 请尊重作者劳动成果,转载请声明文章出处(http://blog.youkuaiyun.com/chdjj/) -----------------------------------------------------------

RowandJJ 1万+
上一篇: PreferenceFragment或PreferenceActivity使用笔记
下一篇: ImageSwitcher和TextSwitcher使用笔记
listenerri
博客等级 码龄12年 39粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值