Fragment

news2024/12/23 3:06:56

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对应的布局文件

    <LinearLayout
        android: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.coloradmin.cn/o/111823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python循环语句(三)

一.while 循环 条件满足无限执行 (1) 定义格式 while 条件&#xff1a;条件为True时重复执行# 写法要求与if语句类似使用示例&#xff1a; i 0 while i < 100:print("观止study")i 1 # 等效于 i i 1 # 需要设置循环终止的条件&#xff0c;如i 1配合 i <…

【Pandas入门教程】如何读取和写入表格数据

如何读取和写入表格数据 来源&#xff1a;Pandas官网&#xff1a;https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html 文章目录如何读取和写入表格数据导包【1】如何读取和写入表格数据【2】小结导包 import pandas as pd数据介绍&#xff1a; 使用存…

【信管5.2】估算活动资源与持续时间

估算活动资源与持续时间在经过上次课程的学习后&#xff0c;我们已经了解到了进度、活动的概念及定义&#xff0c;并且简单地学习了下活动顺序如何排列的一些工具技术。今天&#xff0c;我们学习的主要方向是估算活动资源与估算活动持续时间这两个过程&#xff0c;另外我们还会…

python:写你的第一个爬虫代码

什么是爬虫 爬虫spider&#xff0c;是指向网站或者网络发出请求&#xff0c;获取资源后分析并提取对自己有用的数据的程序。 request&#xff1a;是指用户将自己的信息通过浏览器发送给服务器。 response&#xff1a;服务器收到用户的请求分析后&#xff0c;返回的数据。 注意&…

【Pandas入门教程】如何选择DataFrame的子集

如何选择DataFrame的子集 来源&#xff1a;Pandas官网&#xff1a;https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html 文章目录如何选择DataFrame的子集导包数据准备【1】如何从DataFrame中选择特定列&#xff1f;【2】如何从DataFrame中筛选特定行【…

读研2年,我选择从中科院退学转行做码农

从入学天坑材料专业到退学 先自我介绍一下&#xff1a;我天坑材料专业&#xff0c;本科某211&#xff0c;保研到中科院&#xff0c;但是我真是菜的抠脚&#xff0c;还懒&#xff0c;也不喜欢科研&#xff0c;论文达不到毕业要求&#xff0c;纠结之下研三退学转码农了。 读了2…

基于51单片机的电子秤(5KG+上限报警)

电子秤5KG上限警报设计 原理图&#xff1a; 程序运行图&#xff1a; 部分程序&#xff1a; #include "main.h" #include "LCD1602.h" #include "HX711.h" #include "EEPROM.H" //定义变量 unsigned char KEY_NUM 0; //用来存放按…

Java并发——ThreadLocal总结

概述 并发问题&#xff0c;有时候&#xff0c;可以用ThreadLocal方式来避免。 ThreadLocal&#xff0c;顾名思义&#xff0c;就是线程自己的&#xff0c;独享的&#xff0c;就像线程栈是线程独享的一样。 本文讨论三点&#xff1a; 基本用法设计原理父子线程 基础用法 考虑…

JMS规范及落地产品

目录 一、JMS是什么 二、MQ中间件的其他落地产品 三、JMS的组成结构和特点 四、JMS的可靠性 &#xff08;重要&#xff09; &#xff08;一&#xff09;PERSISTENT&#xff1a;持久性 &#xff08;二&#xff09;事务 &#xff08;三&#xff09;Acknowledge&#xff1a…

C#,图像二值化(01)——二值化算法综述与二十三种算法目录

图像二值化&#xff0c;就是把彩色&#xff08;先转为灰色图&#xff09;最终转为黑白两色图片的计算过程。 看似极其简单&#xff0c;但人们研究了几十年&#xff0c;却始终未达到至臻境界的问题。 本文简要介绍了 图像二值化的算法原理、分类及二十三种算法的目录&#xff…

freeswitch的gateway配置方案

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 在voip的网络模型中&#xff0c;网关是我们经常会遇到的概念。 在freeswitch中&#xff0c;如何配置gateway&#xff0c;如何使用好gateway的模型和功能。 本节简单介绍fs中gateway相关的配置方案。 环境 centos&am…

csp-202209

202209题目一&#xff1a;如此编码【100分】题目二&#xff1a;何以包邮&#xff1f;【100分】题目三&#xff1a;防疫大数据【100分】题目一&#xff1a;如此编码【100分】 比较简单的题&#xff0c;根据题意计算一遍就行 一定要关注csp题目中的提示&#xff0c;这个是很有用…

达梦数据IPO过会:拟募资24亿 光谷“扫地僧”冯裕才将敲钟

雷递网 雷建平 12月23日武汉达梦数据库股份有限公司&#xff08;简称&#xff1a;“达梦数据”&#xff09;日前IPO过会&#xff0c;准备在科创板上市。达梦数据计划募资23.51亿元。其中&#xff0c;3.52亿元用于集群数据库管理系统升级项目&#xff0c;3.43亿元用于高性能分布…

[翻译+笔记]变分自编码器:从AutoEncoder到Beta-VAE

与GAN的那篇笔记相同, 做一下笔记. 并不是全文翻译, 只翻译一部分. 原文地址: from AutoEncoder to Beta-VAE 0. 前言 自编码器是用来重构高维数据的&#xff0c;它利用一个有bottleneck层的神经网络。bottleneck层获取压缩的潜在编码&#xff0c;这样将嵌入向量以低维表示可…

Activity生命周期

Activity生命周期 1.Activity状态 1.基本状态 运行&#xff0c;active。位于最前台&#xff0c;可以和用户交互的激活状态。暂停&#xff0c;pause&#xff0c;被透明或者Dialog覆盖&#xff0c;此时可见失去焦点但是不允许交互。停止&#xff0c;stop&#xff0c;被Active覆盖…

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

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

关于node.js版本切换nvm的命令和安装

首先是安装,第一步,搜索下方链接地址下载Releases coreybutler/nvm-windows GitHub 安装应用下载好后直接安装就可以了,或者下载一个压缩包,在下载安装之前建议先将之前下载的node版本给删除,否则会报错。 上面的操作都结束后,那么,下面就需要通过管理员的权限去查…

外汇天眼:利空美元!2023年美国经济将如履薄冰?各大银行预测整体不乐观!

高盛表示&#xff0c;美国经济可能避免衰退。摩根士丹利预计&#xff0c;美国经济在2023年只是避开了衰退&#xff0c;但着陆并不那么软。瑞士信贷认为&#xff0c;美国明年可以避免经济下滑。摩根大通警告称&#xff0c;明年很有可能出现经济衰退。美国银行预测2023年第一季度…

大学宿舍四位舍友皆为软测,3年后的现状~

笔者最近收到测试员好友小H的分享&#xff0c;临年关&#xff0c;他参加了一场大学舍友毕业3年后的聚会&#xff0c;感慨良多。 从2019年至今&#xff0c;这已经是毕业的第3个年头了。小H的寝室大多来自五湖四海&#xff0c;毕业后&#xff0c;能够相聚的时间也少之又少&#…