Fragment

news/2024/5/20 21:21:19/文章来源:https://blog.csdn.net/weixin_41957626/article/details/128425687

Fragment简单认识

1.简介

  • 在大屏幕设备上支持更加动态和灵活的UI设计
  • 就是一种卡片的设计思路
  • 一个Activity可以有多个Fragment,一个Fragment可以被多个Activity使用
  • 可以进行动态的添加,替换和删除
  • Fragment有着自己的生命周期,同时受到Activity的影响

2.创建方式

2.1分类

  • 静态
  • 动态

2.2Fragment静态创建

1.方法介绍

*LayoutInflater将布局文件实例化,子布局

* container父容器的ViewGroup,父布局

*Bundle,保存Fragment的状态信息的,可以恢复启动的数据

* false的含义是否将该布局放到作为父布局container中。

* true表示该布局是附着在container中的,返回父布局的view,

* false表示该布局不附着在container中,返回第一个参数对应的布局。

注意fragment标签中必须设置name属性和id属性

2.3静态创建案例:

1)Fragment代码

public class BlankFragment extends Fragment {/*
    *LayoutInflater将布局文件实例化,子布局
    * container父容器的ViewGroup,父布局
    *Bundle,保存Fragment的状态信息的,可以恢复启动的数据
    * false的含义是否将该布局放到作为父布局container中。
    * true表示该布局是附着在container中的,返回父布局的view,
    * false表示该布局不附着在container中,返回第一个参数对应的布局。
     * */@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {return inflater.inflate(R.layout.fragment_blank, container, false);}
}

2)Fragment布局

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30dp"
        android:gravity="center"
        android:textColor="@color/red"
        android:text="我是Fragment" />

3)Activity布局文件(静态创建直接使用fragment标签)

  • 必须设置name属性和id属性
<!--    必须设置name属性和id属性-->
    <fragment
        android:id="@+id/testf"
        android:name="com.lxz.review2.BlankFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />

4)效果图

2.4Fragment动态创建

1.简介

  • 不适用标签使用代码的形式进行创建的方式
  • fragment变成了一个空间

2.步骤

  • 创建Fragment
  • 获取manager对象,getSupportFragmentManager()
  • 获取事务对象,getSupportFragmentManager().beginTrasction();
  • 进行增删改,add(),replace(),remove()
  • 提交事务

2.5动态创建案例:

1)activity代码

         FragmentManager manager= getFragmentManager();
         FragmentTransaction transaction= manager.beginTransaction();
        Fragment fragment=new BlankFragment2();
         transaction.add(R.id.f,fragment);
         transaction.commit();

2)activit对应的布局文件

    <LinearLayoutandroid:id="@+id/f"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical">

3)fragment的布局

public class BlankFragment2 extends Fragment {@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {return inflater.inflate(R.layout.fragment_blank2, container, false);}
}

4)fragment的Java代码

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30dp"
        android:gravity="center"
        android:textColor="@color/green"
        android:text="我是动态创建Fragment" />

2.6扩展案例:移除操作

1)布局文件

    <LinearLayout
        android:id="@+id/f"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >    </LinearLayout>    <Button
        android:onClick="removeFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="移除Fragment"
        />
    <Button
        android:onClick="detchFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="移除Fragment"
        />

2)Java代码

//    remove移除
  public void  removeFragment(View view){
       FragmentManager manager= getFragmentManager();
       FragmentTransaction transaction= manager.beginTransaction();
      Fragment fragment=manager.findFragmentById(R.id.f);
       if (fragment!=null)       {
           transaction.remove(fragment);
           transaction.commit();
       }
    }    //detch移除
    public void detchFragment(View view) {
        FragmentManager manager= getFragmentManager();
        FragmentTransaction transaction= manager.beginTransaction();
        Fragment fragment=manager.findFragmentById(R.id.f);
        transaction.detach(fragment);
        transaction.commit();
    }

图1 删除前

图2 删除后

2.6知识扩展

1.add()方法的主要参数是Fragment的容器View(或其ID)及Fragment实例
2.替换Fragment使用的是FragmentTransaction的replace()方法,参数分别为所要替代Fragment所在容器的ID和新的Fragment:
3.删除Fragment需要FragmentTransaction的remove()方法,参数为Fragment对象,4.Fragment对象可以通过FragmentManager的findFragmentById()方法获得。
5.add():向Activity加入一个片段,这个片段在activity容器中有他自己的视图。
6.hide():隐藏已经存在的Fragment,但是仅仅对已经添加到父容器中的Fragment有关,7.隐藏Fragment的Viewshow():显示一个以前被隐藏的Fragment,这仅仅对已经添加到activity中的Fragment有关,显示Fragment的Viewdetach():Fragment的视图被销毁,但是它的状态没有被销毁,还是被fragment manager管理。
8.attach():Fragment的view重新加载到UI视图中,并显示,也就是执行onCreateView()→onActivityCreate()→onStart()→onResume()replace():就相当于执行remove(Fragment)→add(int, Fragment, String)这两个方法
9.hide()方法仅仅是隐藏了Fragment的View,而没有销毁View,show()方法仅仅是显示之前隐藏的View。
10.replace()是先remove(Fragment),然后add(Fragment),这样会导致fragment的重新创建。
11.detach()是将Fragment的视图销毁,Fragment的状态没有被销毁,还是被FragmentMenager管理。

3.Fragmeny的生命周期

1.生命周期函数

  • onAttach(Context context):fragment附加到Activity时调用,context就是当前的Activity的对象
  • onCreate():系统创建Fragment对象后回调该方法,实现代码中只初始化想要在Fragment中保持的必要控件,当Fragment被暂停或者停止后可以恢复。
  • onCreateView():当Activity要得到Fragment的layout时,会回调该方法,Fragment在其中创建自己的layout界面。该方法必须返回一个View,该View也就是该Fragment要显示的view。
  • onActivityCreated():当Fragment所在的Activity被启动完成后回调该方法。
  • onStart():启动Fragment时被回调
  • onResume():Fragment进入前台获得焦点时被回调,onStart()方法后一定会回调onResume()方法。
  • onPause():暂停该Fragment时将会回调该方法。
  • onStop():停止Fragment时被回调
  • onDestroyView():销毁该Fragment所包含的View时被调用。
  • onDestroy():销毁该Fragment。
  • onDetach():将该Fragment从Activity中解除关联。onDestroy方法一定会回调onDetach()方法。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_616840.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Shiro之授权

授权 1、角色认证 在controller层创建接口 使用shiro中的注解RequiresRoles指定能访问的角色名称 /*** 登录认证角色*/ RequiresRoles("admin") GetMapping("/userLoginRoles") ResponseBody public String userLoginRoles(){System.out.println("…

微信键盘终于正式发布,张小龙说:其目的并不是为了抢夺输入法市场

自从2021年1月份&#xff0c;张小龙在微信公开课透露&#xff1a;微信将上线属于自己的专属输入法&#xff0c;到现在已经快2年过了。 今天终于正式发布了&#xff0c;下面我们一起来体验下。 1、安装 打开App Store&#xff0c;输入“微信键盘”&#xff0c;点击获取就可以…

基于Springboot+Mybatis+mysql+element-vue高校就业管理系统

基于SpringbootMybatismysqlelement-vue高校就业管理系统一、系统介绍二、功能展示1.用户登陆注册2.个人信息(学生端)3.查看企业岗位信息&#xff08;学生端&#xff09;4.我的应聘(学生端)5.学生信息管理&#xff08;辅导员&#xff09;6.三方协议书审核&#xff08;辅导员&am…

一文读懂Linux内核处理器架构中的栈

栈是什么&#xff1f;栈有什么作用&#xff1f; 首先&#xff0c;栈 (stack) 是一种串列形式的 数据结构。这种数据结构的特点是 后入先出 (LIFO, Last In First Out)&#xff0c;数据只能在串列的一端 (称为&#xff1a;栈顶 top) 进行 推入 (push) 和 弹出 (pop) 操作。根据…

自学编程和计算机科班出身的差别在哪里

前不久逛知乎的时候看到一个问题&#xff1a;自学编程和计算机科班出身的差别在哪里&#xff1f; 自己回答了一下&#xff0c;获得了比较多的点赞和评论&#xff0c;在这里也分享给大家。 985 通信专业学长&#xff0c;转行程序员&#xff0c;聊一聊我的看法&#xff1a;说一千…

YOLOV3论文学习

YOLOv3论文链接&#xff1a;https://pjreddie.com/media/files/papers/YOLOv3.pdf 综述 一、摘要 1、320*320的YOLOv3推理时间22ms&#xff0c;准确率28.2mAP&#xff0c;达到了SSD的精确度&#xff0c;推理速度却快了三倍。 2、基于.5mAp Iou 的YOLOv3的检测效果还比较不错&a…

Doo Prime 为泰国 SOS 儿童村送温暖,公益有起点爱心无疆界

一年一度的圣诞节即将来临&#xff0c;在这欢乐的时刻&#xff0c; Doo Prime 荣幸地宣布 &#xff0c;向泰国 SOS 儿童村捐赠了 35 万泰铢 ( 约合 1.23 万美元 )&#xff0c;作为泰国南部城市合艾府 SOS 儿童村的房屋翻修费用。 Doo Prime 希望 SOS 儿童村的孩子们都能在温馨…

Android入门第55天-在Android里使用OKHttp组件访问网络资源

简介 今天的课程开始进入高级课程类了&#xff0c;我们要开始接触网络协议、设备等领域编程了。在今天的课程里我们会使用OKHttp组件来访问网络资源而不是使用Android自带的URLConnection。一个是OKHttp组件更方便二个是OKHttp组件本身就带有异步回调功能。 下面就进入课程。…

(Java)车厢重组

车厢重组一、题目描述二、输入格式三、输出格式四、样例&#xff08;1&#xff09;样例输入&#xff08;2&#xff09;样例输出五、正确代码六、思路一、题目描述 在一个旧式的火车站旁边有一座桥&#xff0c;其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最…

Fragment案例

Fragment案例 1.案例要求 框架布局项目难点&#xff1a;1 导航栏的实现&#xff0c;显示导航按钮、切换Fragment 2 每个Fragment的创建、显示 3 Fragment的跳转&#xff08;从新闻列表到新闻详情&#xff0c;再返回&#xff09; 涉及的技术&#xff1a;用RadioGroup及RadioButt…

【源码共读】Vite 项目自动添加 eslint 和 prettier

vite-pretty-lint库是一个为Vite创建的Vue或React项目初始化eslint和prettier的库。 该库的目的是为了让开发者在创建项目时&#xff0c;不需要手动配置eslint和prettier&#xff0c;而是通过vite-pretty-lint库来自动配置。 源码地址&#xff1a; vite-pretty-lintgithub1s…

3ds Max:标准几何体

三维软件中一般有许多非常复杂的命令&#xff0c;能够完成非常复杂的图形运算&#xff0c;但其实许多绚丽的图形也是由最基本的几何体构成&#xff0c;许多复杂的命令也是基本的运算程序的集合&#xff0c;就像是砖块&#xff0c;构成了复杂的大厦。任何一个几何体&#xff0c;…

【Linux】缓冲区/磁盘inode/动静态库制作

目录 一、缓冲区 1、缓冲区的概念 2、缓冲区的意义 3、缓冲区刷新策略 4、同一份代码&#xff0c;打印结果不同 5、仿写FILE 5.1myFILE.h 5.2myFILE.c 5.3main.c 6、内核缓冲区 二、了解磁盘 1、磁盘的物理结构 2、磁盘的存储结构 2.1磁盘的定位 3、磁盘的抽象…

Sentinel系列——概述与安装1-1

Sentinel系列——概述与安装1-1概述服务雪崩解决方法基本概念资源规则Sentinel 是如何工作的安装Sentinel下载地址启动修改sentinel启动参数设置启动端口设置用户名密码概述 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言…

java开发的环保网站垃圾分类系统源码

本项目是基于springboot开发的小区垃圾分类的监管系统。为了更好的督促小区业主更好的进行垃圾分类和垃圾投放&#xff0c;本系统设计了一套积分奖罚机制&#xff0c;如果业主此次投放垃圾符合分类要求则加10积分&#xff0c;不符合则扣除200积分&#xff0c;积分不够需要进行扫…

Zookeeper 4 Zookeeper JavaAPI 操作 4.1 Curator 介绍 4.2 Curator API 常用操作【建立连接】

Zookeeper 【黑马程序员Zookeeper视频教程&#xff0c;快速入门zookeeper技术】 文章目录Zookeeper4 Zookeeper JavaAPI 操作4.1 Curator 介绍4.1.1 Curator 介绍4.2 Curator API 常用操作4.2.1 Curator API 常用操作4.2.2 建立连接4 Zookeeper JavaAPI 操作 4.1 Curator 介绍…

spring提前加载,懒加载,bean的作用域和注入注解讲解

前言 sping知识随笔笔记&#xff1b;spring提前加载&#xff0c;懒加载&#xff0c;bean的作用域和注入注解讲解 这里写目录标题前言1 depends-on2 bean的作用域3 lazy-init 懒加载4 Autowrite和Resource的区别和使用1 depends-on depends-on 是提前加载&#xff0c;比如在实…

《北京市数字经济促进条例》图解来了

《北京市数字经济促进条例》 2023/1/1 二十大对建设数字经济作出重要部署。党的二十大报告中指出&#xff0c;“加快建设网络强国、数字中国”、“加快发展数字经济&#xff0c;促进数字经济和实体经济深度融合&#xff0c;打造具有国际竞争力的数字产业集群”。习总书记强调…

eclipse和sts安装lombok

eclipse和sts安装lombok 说明 sts 是 eclipse集成springboot的开发环境 所以 sts 和 eclipse 安装 lombok 步骤基本一样 参考网址: https://blog.csdn.net/qq_39826207/article/details/119007580?ops_request_misc%257B%2522request%255Fid%2522%253A%252216708973141680…

生物系转行学编程,如今身家26亿

在编程界有许多明星级别的大牛&#xff0c;他们有些人学习成绩很差&#xff0c;有些人甚至不是科班出身&#xff0c;但对编程的狂热和努力&#xff0c;成就了他们在IT界“名利双收”的地位。 在我们中国编程界就有这样一位大牛&#xff0c;非科班出身&#xff0c;却做到了神一般…