Android开发之Fragment

news2024/9/25 1:14:08

Fragment可以看作一种灵活的子Activity,其依附于Activity运行。一个Activity下可以依附多个Fragment,从而实现一个页面多个窗口,而同一个Fragment也能被多个Activity复用,因此Fragment是Android开发中相当重要的板块。

文章目录

  • Fragment简单使用
    • 基本架构
    • 运行效果
  • 在activity中加入多个fragment

Fragment简单使用

基本架构

首先,在java代码里新建一个空白Fragment:
在这里插入图片描述
默认给的代码很多都是没用的,我们直接删掉,只保留创建函数:

package com.example.fragmentbase;

import android.os.Bundle;

import androidx.fragment.app.Fragment;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

public class BlankFragment1 extends Fragment {


    private View root;
    private TextView textview;
    private Button button;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        if (root == null){
            root = inflater.inflate(R.layout.fragment_blank1, container, false);
        }
        textview = root.findViewById(R.id.textview);
        button = root.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                textview.setText("Clicked Button");
            }
        });
        return root;
    }
}

代码的整体逻辑是,在创建函数中根据布局文件fragment_blank1渲染出一个View放置在root中,之后获取到fragment中的textview和button,并声明一个点击响应函数,当按钮被点击时更改textview中的文本。

其中,渲染所需的布局文件需要我们自己编写,放在layout文件夹,在这里我放置了用于演示的TextView控件和Button控件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".BlankFragment1">

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:id="@+id/textview"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="@string/hello_blank_fragment" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="button"
        android:id="@+id/button"/>

</LinearLayout>

之后,在activity_main.xml中添加一个fragment,注意是小写,同时fragment作为组件比较特殊,必须要有一个id,否则会闪退。为了将这个fragment和我们编写的java代码绑定,我们需要给这个fragment设置name。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical">

    <fragment android:name="com.example.fragmentbase.BlankFragment1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/fragment1"/>

</LinearLayout>

运行效果

初始界面:

点击按钮后:
在这里插入图片描述

在activity中加入多个fragment

代码很简单,复制一份BlankFragment1.javaBlankFragment2.java,然后在activity_main.xml中加入fragment2的内容,再在模拟器中运行,就可以看到两个页面了,这两个页面是并行互不干扰的,如下图:

在这里插入图片描述
点击上面的按钮后,上面的Fragment文本改变,而下面不变。
在这里插入图片描述

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

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

相关文章

Docker-compose容器编排

Docker-Compose介绍 Compose 是 Docker 公司推出的一个工具软件&#xff0c;可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml&#xff0c;写好多个容器之间的调用关系。然后&#xff0c;只要一个命令&#xff0c;就能同时启动/关…

Visual Studio 2022 程序员必须知道高效调试手段与技巧(中)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 &#x1f4cb; 前言&#x1f4ac; 调试的时候查看程序当前信息&#x1f4ad; 查看临时变量的值&#x1f4ad; 查…

实验报告-Sublime配置默认语法,以配置Verilog语法为例

实验报告-Sublime配置默认语法,以配置Verilog语法为例 1,下载Verilog语法环境2,Sublime配置语法工作环境,以Verilog语法环境为例。3,打开一个新的Sublime,验证编辑器配置Verilog为默认语法成功!4,Sublime汉化1,下载Verilog语法环境 参考文献: 1,Sublime Text 4加载…

29.Git版本控制工具

1.Git简介 Git是一开源的分布式版本控制系统&#xff0c;提供了存储代码、管理版本历史、分支和合并等功能。 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理&#xff0c;是软件配置管理的核心思想之一。它的主要目的是跟踪和记录软件开发过程…

【2500. 删除每行中的最大值】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个 m x n 大小的矩阵 grid &#xff0c;由若干正整数组成。 执行下述操作&#xff0c;直到 grid 变为空矩阵&#xff1a; 从每一行删除值最大的元素。如果存在多个这样的值&#xff0c;删除其…

手把手教你写代码——基于控制台的通讯录管理系统(单表)

栏目介绍 本栏目专为入门java学习者设计的一些简单的入门项目 功能介绍 本项目为简单的基于控制台的通讯录管理系统&#xff0c;所需要的环境仅仅为jdk以及mysql&#xff08;版本不限&#xff09;&#xff01;只有一个简单的eclipse软件以及我们的mysql可视化工具&#xff08;视…

企业网关:打开商业大门的关键

企业网关&#xff1a;打开商业大门的关键 在当今数字化时代&#xff0c;企业网关的重要性变得越来越明显。作为连接企业内外的关键枢纽&#xff0c;企业网关不仅提供了安全可靠的网络连接&#xff0c;还为企业提供了更高效的业务运营和更好的客户体验。本文将深入探讨企业网关…

Vue-路由

一、目标 能够说出前端路由工作的过程能够知道如何在vue3中配置路由能够知道如何使用嵌套路由能够知道如何实现动态路由匹配能够知道如何使用编程式导航能够知道如何使用导航守卫 二、目录 前端路由的概念与原理vue-router的基本使用vue-router的高级用法后台管理案例 前端…

linux下的questasim安装和与vivado的关联

一、questasim安装 参考链接 IC验证工具&#xff1a;Ubuntu下Questasim10.7安装&#xff08;64bit&#xff09;全攻略 参考2 易特创芯 linux环境下questasim 10.7的安装总结_limanjihe的博客-CSDN博客 前面操作参照的第一个链接&#xff0c;后面激活文件参考的第二个 另外…

JavaScript 常用数组方法之数组扁平化「赶紧收藏」

一、什么是数组扁平化 数组扁平化&#xff0c;就是将一个复杂的嵌套多层的数组&#xff0c;一层一层的转化为层级较少或者只有一层的数组。 比如&#xff1a; // 多维数组 var arr [1,2,[3,4,5,[6,7,8],9],10,[11,12]]; // 数组扁平化 [1,2,3,4,5,6,7,8,9,10,11,12]二、实现…

关于在Python的for循环中改变列表的值问题探究

案例一&#xff1a; def test():a [1, 2]for i in a:print(i, id(a))if i 5:breaka [a[0]2, a[1]2] 输出&#xff1a; 1 4313456192 2 4313269056 解释&#xff1a; 在for循环语句中的变量a使用的内存地址为4313456192&#xff0c;这个地址以及存储的值不会因为a的重新赋…

ceph-mon运行原理分析

一、流程&#xff1a;ceph-deploy部署ceph-mon组建集群 1.ceph-deploy部署ceph-mon的工作流程及首次启动 1&#xff09;通过命令创建ceph-mon&#xff0c;命令为&#xff1a;ceph-deploy create mon keyring def mon(args):if args.subcommand create:mon_create(args)elif…

【Jenkins系列】-Pipeline语法全集

Jenkins为您提供了两种开发Pipeline的方式&#xff1a;脚本式和声明式。 脚本式流水线&#xff08;也称为“传统”流水线&#xff09;基于Groovy作为其特定于域的语言。而声明式流水线提供了简化且更友好的语法&#xff0c;并带有用于定义它们的特定语句&#xff0c;而无需学习…

金融行业软件测试面试题及其答案

下面是一些常见的金融行业软件测试面试题及其答案&#xff1a; 1. 什么是金融行业软件测试&#xff1f; 金融行业软件测试是针对金融领域的软件系统进行验证和确认的过程&#xff0c;旨在确保软件在安全、稳定、可靠和符合法规要求的条件下运行。 2. 解释一下金融软件中的风险…

golang,gin框架的请求参数(一)--推荐

golang&#xff0c;gin框架的请求参数&#xff08;一&#xff09; gin框架的重要性不过多的强调&#xff0c;重点就gin使用中的参数传递&#xff0c;获取进行梳理文件&#xff0c;满足使用需求。 获取前端请求参数的几种方法&#xff1a; 一、获取参数【浏览器地址获取参数】…

linux的一些基本指令第二期

rm rm -r 你要删除的目录名 加了-r 之后表示递归删除你要删除的目录 使用这个命名之后&#xff0c;他会一边递归到叶子节点&#xff0c;一边询问你是否要删除&#xff0c;然后会递归回来&#xff0c;在回来的途中删除&#xff1a; rm -rf 你要删除的目录名 强制执行删除操作…

权威认证!伙伴云入选亿欧2023AIGC应用场景创新TOP50榜单

近日, 知名科技与产业创新服务平台【亿欧】发布2023年度AIGC应用场景创新TOP50榜单。 伙伴云作为行业领先的零代码应用搭建平台&#xff0c;率先推出AI智能搭建系统功能&#xff0c;并将Chat GPT应用嵌入伙伴云应用在解决方案层&#xff0c;最终凭借前沿的技术创新力和突出的数…

【NVMe2.0d 17 - 1】Reservation 核心命令

文章目录 Reservation RegisterReservation AcquireReservation ReportReservation Release Reservation Register Reservation Register命令用于注册、取消注册或替换reservation key。 该命令使用Command Dword 10和内存中的Reservation Register data structure 如果该命…

基于seaborn.countplot的柱状图显示Y值及填充形状

参考链接&#xff1a; seaborn 柱状图上显示y值的方法 python柱形图填充 figs,ax plt.subplots(figsize(10,4)) fig sns.countplot(x"状态",hue"等级", datadatas)// 不可通过设置hatch参数来设置 marks ["o","---","***&quo…

IDEA批量启动多个微服务

注&#xff1a;现在盛行微服务开发&#xff0c;通常需要通过idea启动多个项目&#xff0c;每次都一个一个的启动&#xff0c;太麻烦了&#xff0c;不过被担心idea帮我们考虑到这个了&#xff08;不用安装插件哦&#xff09; 配置步骤&#xff1a; 将需要一次性全部启动的微服务…