安卓:Fragment

目录

一、Fragment介绍

二、Fragment的使用方式

(一)、Fragment静态添加:

静态添加例子:

FirstFragment :

MainActivity: 

main_activity: 

fragment_first: 

静态添加的总结:

 (二)、Fragment动态添加:

Fragment动态添加例子:

 MainActivity :

Fragment动态的添加总结:

一、Fragment介绍

        Fragment 是 Android 平台上的一种 UI 组件,用于构建灵活且可复用的界面模块。每个 Fragment 都有自己的生命周期,可以嵌入到 Activity 中,并在一个 Activity 内部管理其自己的布局和行为。通过使用 Fragment,可以实现更加模块化和灵活的应用程序设计,提高代码的可重用性和可维护性。

Fragment 具有以下特点和优势:

  1. 模块化:Fragment 可以作为 Activity 的独立模块存在,使得应用程序的 UI 可以更细粒度地进行设计和组织。多个 Fragment 可以在同一个 Activity 中共存,实现更复杂的界面和交互效果。

  2. 生命周期:Fragment 拥有自己的生命周期,与包含它的 Activity 分开管理。这意味着可以在 Fragment 的生命周期方法中执行特定的操作,例如在创建、销毁和暂停时进行相应的处理。

  3. 布局灵活性:每个 Fragment 都可以拥有自己的布局文件,通过组合和嵌套 Fragment,可以实现灵活多样的用户界面布局。

  4. 通信与交互:Fragment 可以通过 Activity 传递数据和事件,也可以与其他 Fragment 进行通信。这种通信可以通过接口回调、共享 ViewModel 等方式实现。

  5. 适配性:通过使用 Fragment,可以更好地适应不同尺寸的屏幕和设备。可以根据屏幕大小和方向动态加载、替换或隐藏特定的 Fragment,以提供最佳的用户体验。

二、Fragment的使用方式

        运行 Fragment 的静态添加和动态添加是两种常见的方式,用于在 Activity 中加载和展示 Fragment。

(一)、Fragment静态添加:

静态添加是指在 Activity 的布局文件中直接声明 Fragment,并与相应的布局容器关联。在静态添加的情况下,Fragment 的生命周期与 Activity 的生命周期紧密相关,它们的创建和销毁是由 Activity 控制的。

静态添加例子:

FirstFragment :

package com.example.fragmentdemo;import android.os.Bundle;import androidx.fragment.app.Fragment;import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;public class FirstFragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_first, container, false);}
}

MainActivity: 

package com.example.fragmentdemo;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}
}

main_activity: 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.fragment.app.FragmentContainerViewandroid:id="@+id/fragmentContainerView"android:name="com.example.fragmentdemo.FirstFragment"android:layout_width="410dp"android:layout_height="425dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

fragment_first: 

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".FirstFragment"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:textSize="25sp"android:text="我是第一个Fragment" /></FrameLayout>

静态添加的总结:

静态添加的步骤如下:

  1. 在 Activity 的布局文件中添加 <fragment> 标签,并指定该标签的 android:name 属性为目标 Fragment 的完整类名。
  2. 可以使用其他属性来配置 Fragment,例如指定 android:layout_width 和 android:layout_height 来决定 Fragment 在布局中的大小和位置。

 (二)、Fragment动态添加:

        动态添加是指在运行时通过代码将 Fragment 动态添加到 Activity 中。与静态添加不同,动态添加提供了更大的灵活性,可以根据需要在特定的时机添加或移除 Fragment。

Fragment动态添加例子:

 MainActivity :

package com.example.fragmentdemo;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;import android.os.Bundle;
import android.view.View;
import android.widget.Button;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 创建一个 Fragment 实例SecondFragment fragment = new SecondFragment();// 获取 FragmentManagerFragmentManager fragmentManager = getSupportFragmentManager();// 开启事务FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();// 将 Fragment 添加到容器fragmentTransaction.add(R.id.container, fragment, "myFragment");// 提交事务fragmentTransaction.commit();// 找到按钮视图并设置点击事件监听器Button btnSwitch = findViewById(R.id.btnSwitch);btnSwitch.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 创建一个 FirstFragment 实例FirstFragment firstFragment = new FirstFragment();// 开启新的事务FragmentTransaction switchTransaction = fragmentManager.beginTransaction();// 替换当前的 FragmentswitchTransaction.replace(R.id.container, firstFragment);// 提交事务switchTransaction.commit();}});}
}

FirstFragment 和SecondFragment 代码和布局跟上面的静态添加一样

Fragment动态的添加总结:

动态添加的步骤如下:

  1. 在 Activity 中定义一个 FragmentTransaction 对象,用于管理 Fragment 的添加、替换和移除操作。
  2. 使用 FragmentManager 获取 FragmentTransaction 对象。
  3. 调用 FragmentTransaction 的 add() 方法,将目标 Fragment 添加到 Activity 中,并指定一个容器视图的 ID,该 ID 对应于布局文件中的一个 View。
  4. 最后,调用 FragmentTransaction 的 commit() 方法提交事务,使得添加操作生效。

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

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

相关文章

Java-通过IP获取真实地址

文章目录 前言功能实现测试 前言 最近写了一个日志系统&#xff0c;需要通过访问的 IP 地址来获取真实的地址&#xff0c;并且存到数据库中&#xff0c;我也是在网上看了一些文章&#xff0c;遂即整理了一下供大家参考。 功能实现 这个是获取正确 IP 地址的方法&#xff0c;可…

域内信息收集

将网络中多台计算机逻辑上组织到一起进行集中管理&#xff0c;这种区别于工作组的逻辑环境叫 做域。域是由域控制器(Domain Controller)和成员计算机组成&#xff0c;域控制器就是安装了活动 目录(Active Directory)的计算机。活动目录提供了存储网络上对象信息并使用网络使用该…

uniapp H5预览PDF文件

1&#xff0c;下载资源后hybrid文件存放在static静态文件里 (点击这里去下载文件) 2&#xff0c;pdf预览页面配置 <template><view style"width: 100vh;"><web-view :src"pdfUrl"></web-view></view> </template><…

全面深入理解MySQL自增锁

&#x1f497;推荐阅读文章&#x1f497; &#x1f338;JavaSE系列&#x1f338;&#x1f449;1️⃣《JavaSE系列教程》&#x1f33a;MySQL系列&#x1f33a;&#x1f449;2️⃣《MySQL系列教程》&#x1f340;JavaWeb系列&#x1f340;&#x1f449;3️⃣《JavaWeb系列教程》…

【HarmonyOS】元服务隐私协议开发指导样例

【关键字】 隐私、弹窗、元服务、协议 【介绍】 每个元服务必须提供隐私声明&#xff0c;否则将导致提交元服务发布上架时&#xff0c;审核无法通过。隐私声明的具体要求请参见隐私声明规范。用户使用元服务前&#xff0c;必须引导其了解隐私声明信息&#xff0c;获取用户授权…

C#被指定窗体的MdiParent的窗体不是MdiContainer

工作的时候遇到一个问题&#xff1a; 被指定窗体的MdiParent的窗体不是MdiContainer 这个问题的原因是父窗体的IsMdiContainer 属性设置为false导致的。将此属性设置为true&#xff0c;即可解决此问题。有两种方式设置窗体的IsMdiContainer 属性。 第一种&#xff0c;在父窗口…

python实现拼多多商品详情接口API

最近工作需要用到拼多多的一些接口&#xff0c;官方竟然没有提供&#xff0c;python的sdk&#xff0c;于是就自己简单的写了一个商品SKU接口的api。 1、代码 #!/usr/bin/python3# -*- coding: utf-8 -*-# Time : 2020/3/29 0021 下午 19:40# Author : xiaozhi&#xff01;…

「深度学习之优化算法」(十六)万有引力算法

1. 万有引力算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读) 万有引力算法(Gravitational Search Algorithm)是受物体之间的万有引力启发而提出的算法。算法提出于2008(2009)年,时间不长,不过相关的文章和应用已经相对较多,也有不少的优化改进方案。   万…

apple pencil二代平替笔哪个好用?苹果平板平替笔排行

光是一款Apple Pencil&#xff0c;就卖到了接近一千多块&#xff0c;信息对于很多人来说都觉得太贵了。事实上&#xff0c;由于平替电容笔的性价比也非常高&#xff0c;因此它还是值得一试的。不管是学习&#xff0c;写作&#xff0c;还是绘画&#xff0c;这支平替电容笔&#…

自洽性改善语言模型中的思维链推理7.13、7.14

自洽性改善语言模型中的思维链推理 摘要介绍对多样化路径的自洽实验实验设置主要结果当CoT影响效率时候&#xff0c;SC会有所帮助与现有方法进行比较附加研究 相关工作总结 原文&#xff1a; 摘要 本篇论文提出了一种新的编码策略——自洽性&#xff0c;来替换思维链中使用的…

AI绘画 | 迷人武士美少女战士作品集

今天用Midjourney生成了质量极高的美少女武士后续会作为固定栏目来分享美图接下来请欣赏作品 提示词分享&#xff1a;1.an asian girl dressed in samurai style, in the style of anime aesthetic, trick of the eye paintings, dollcore, light red and black, resin, 8k, ex…

数据结构--图的基本操作

数据结构–图的基本操作 使用的存储模式&#xff1a; 图的基本操作&#xff1a; • Adjacent(G,x,y)&#xff1a;判断图G是否存在边<x, y>或(x, y)。 • Neighbors(G,x)&#xff1a;列出图G中与结点x邻接的边。 • InsertVertex(G,x)&#xff1a;在图G中插入顶点x。 • …

Apache HTTPD 多后缀解析漏洞

Apache HTTPD 多后缀解析漏洞 一、环境搭建二、漏洞原理三、漏洞复现 一、环境搭建 如下介绍kali搭建的教程 cd ~/vulhub/httpd/apache_parsing_vulnerability // 进入指定环境 docker-compose up -d // 启动环境docker-compose ps使用这条命令查看当前正在运行的环境 打开…

Java入门

目录 一、程序 什么是程序 二、计算机编程语言 1.计算机语言是什么 Java历史 特点 执行机制 计算机执行机制 Java的执行机制 三、JDK安装 名词解释 安装与校验 配置环境变量 四、第一个Java程序 编写代码 编译运行 规范 六、Java核心机制&#xff1a;JVM 1.…

【C语言】memcpy,memmove,memcmp,memset函数详解

memcpy,memmove,memcmp,memset函数详解 memcpy函数一、 memcpy函数的定义&#xff1a;二、memcpy函数的功能&#xff1a;三、memcpy函数模拟memcpy注意事项 memmove函数一、memmove函数简介二、memmove函数的模拟1.两种情况2模拟实现 memcmp函数memecmp函数介绍 memset函数mems…

数据结构(王道)——线性表的存储结构之双链表

双链表和单链表的对比 一、从无到有创建一个双链表及其基础操作 带头结点 的双链表 初始化 双链表的后插操作&#xff1a; 从后插可以拓展到按位序插入&#xff0c;和前插操作。 因为双链表的特性&#xff0c;如果按位序插入或者前插操作&#xff0c;只需要找到插入的位置的前…

基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的前后端完整过程

首先前端发起HTTP请求之后&#xff0c;后端返回一个Excel输出流&#xff0c;然后前端用Blob类型接收数据&#xff0c;并且解析响应头数据以及提取源文件名&#xff0c;最后用a标签完成下载。 一、后端代码 &#xff08;1&#xff09;导入阿里巴巴的EasyExcel依赖&#xff08;…

Type-C PD显示器方案简介

方案概述 LDR6020 Type-C PD显示器方案可以给显示器提供一个全功能C口&#xff0c;支持手机&#xff0c;电脑&#xff0c;游戏主机等一线投屏功能&#xff0c;同时支持PD快充输出。LDR6020内置了 USB Power Delivery 控制器和 PD BMC PHY 收发器&#xff0c;支持PD2.0/3.0等快充…

Low-Light Image Enhancement via Self-Reinforced Retinex Projection Model 论文阅读笔记

这是马龙博士2022年在TMM期刊发表的基于改进的retinex方法去做暗图增强&#xff08;非深度学习&#xff09;的一篇论文 文章用一张图展示了其动机&#xff0c;第一行是估计的亮度层&#xff0c;第二列是通常的retinex方法会对估计的亮度层进行RTV约束优化&#xff0c;从而产生…

ceph----应用

文章目录 一、创建 CephFS 文件系统 MDS 接口1.1 服务端操作1.2 客户端操作 二、创建 Ceph 块存储系统 RBD 接口三、OSD 故障模拟与恢复四、创建 Ceph 对象存储系统 RGW 接口 一、创建 CephFS 文件系统 MDS 接口 1.1 服务端操作 1&#xff09;在管理节点创建 mds 服务 cd /et…