安卓: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,一经查实,立即删除!

相关文章

Android 中app内存回收优化(一):R版本

版本基于&#xff1a;Android R 0. 前言 Android Q 中新增了framework 端app 内存回收优化方案。当app 的 oom adj 发生特定变化时&#xff0c;framework 端会对应用的内存进行处理。随着版本的演变&#xff0c;这部分优化工作也一直在完善&#xff0c;笔者将针对 Android R 和…

Java-通过IP获取真实地址

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

脚本定制gitlab官方api获取项目组下的所有项目

脚本说明 通过gitlab官方api接口获取项目组下的所有项目的ssh_git连接并同步项目仓库 #!/bin/bash urlhttps://gitee.xxxxx.cn dir/usr/src/redmine/git-repo group_id69 token2dskWweijirdrrm9UERvcd ${dir}#获取所有项目ssh_url_to_repo curl -s "${url}/api/v4/group…

域内信息收集

将网络中多台计算机逻辑上组织到一起进行集中管理&#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;获取用户授权…

【NLP】一项NER实体提取任务

一、说明 从文本中提取实体是一项主要的自然语言处理 (NLP) 任务。由于深度学习(DL)的最新进展使我们能够将它们用于NLP任务,并且与传统方法相比,在准确性上产生了巨大的差异。 我试图使用深度学习和传统方法从文章中提取信息。结果是惊人的,因为DL方法…

tcpdump 使用

Linux tcpdump抓包工具使用 tcpdump官网tcpdump使用tcpdump抓取http请求 tcpdump官网 官网 请参考官网参看具体参数信息 tcpdump使用 tcpdump抓取http请求 http请求抓取参考网址 //抓取HTTP GET (GET 0x47, 0x45, 0x54, 0x20) 请求,以ascii展示 tcpdump -i eth0 -A -s 0 …

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

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

Chrome远程调试webview

网址 谷歌远程调试解决方案 https://blog.csdn.net/m0_56516186/article/details/131260563Chrome远程调试webview https://blog.csdn.net/weixin_44801980/article/details/117755550

Editing Large Language Models: Problems, Methods, and Opportunities

本文是LLM相关的系列文章&#xff0c;针对《Editing Large Language Models: Problems, Methods, and Opportunities》的翻译。 编辑大语言模型&#xff1a;问题、方法和机遇 摘要1 引言2 问题定义3 当前方法3.1 保留LLM参数的方法3.2 修改LLM参数的方法 4 初步实验4.1 数据集…

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;…

201. 数字范围按位与 Python

文章目录 一、题目描述示例 1示例 2示例 3 二、代码三、解题思路 一、题目描述 给你两个整数 left 和 right &#xff0c;表示区间 [left, right] &#xff0c;返回此区间内所有数字 按位与 的结果&#xff08;包含 left 、right 端点&#xff09;。 示例 1 输入&#xff1a…

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

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使用这条命令查看当前正在运行的环境 打开…