Android开发——Fragment

Demo

fragment_blank.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="40dp"android:text="@string/app_name"android:id="@+id/tv"></TextView><Buttonandroid:layout_width="match_parent"android:layout_height="40dp"android:id="@+id/btn"/>
</LinearLayout>

fragment_blank.java

package com.example.myapplication;import android.os.Bundle;import androidx.annotation.NonNull;
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;/*** A simple {@link Fragment} subclass.* Use the {@link BlankFragment#} factory method to* create an instance of this fragment.*/public class BlankFragment extends Fragment {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {if(root==null){root = inflater.inflate(R.layout.fragment_blank,container,false);}textView = root.findViewById(R.id.tv);Button button = root.findViewById(R.id.btn);button.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {textView.setText("OK");}});return root;}private View root;private TextView textView;
}

activity_main.xml

<?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:id="@+id/main"android:orientation="vertical"><androidx.fragment.app.FragmentContainerView android:name="com.example.myapplication.BlankFragment"android:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/fg"/></LinearLayout>

绑定fragment 

动态添加

main_activity.mxl

<?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"android:id="@+id/main"><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/btn1"android:text="@string/app_name"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/btn2"android:text="@string/bottom_sheet_behavior"/><FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/fl"android:background="@drawable/ic_launcher_background"/></LinearLayout>

Activity_main.java

package com.example.myapplication;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;public class MainActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);return insets;});Button btn = findViewById(R.id.btn1);btn.setOnClickListener(this);Button btn2 = findViewById(R.id.btn2);btn2.setOnClickListener(this);}@Overridepublic void onClick(View v) {if(v.getId()==R.id.btn1){replaceFragment(new BlankFragment2());}else{replaceFragment(new ItemFragment());}}// 动态切换private void replaceFragment(Fragment blankFragment2) {FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction transaction = fragmentManager.beginTransaction();transaction.replace(R.id.fl,blankFragment2);transaction.commit();}
}

 

点击按钮,Fragment对象会被替换到下方FrameLayout容器上。

除了替换,还有很多操作 Fragment对象的方法。

其中将Fragment压入同一个栈的操作,可以通过按返回键依次出栈:

Activity和Fragment通信(Bundle方案)

MainActivity.java:

public void onClick(View v) {if(v.getId()==R.id.btn1){Bundle bundle = new Bundle();bundle.putString("111","222");BlankFragment2 blankFragment2 = new BlankFragment2();blankFragment2.setArguments(bundle);replaceFragment(blankFragment2);}else{replaceFragment(new ItemFragment());}}

按按钮之后将数据传给Fragment对象。

BlankFragment2.java

 public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentView view = inflater.inflate(R.layout.fragment_blank2, container, false);TextView textView = view.findViewById(R.id.fb2);Bundle bundle = this.getArguments();assert bundle != null;String ret = bundle.getString("111");// ret存放的就是传过来的参数的值textView.setText(ret);return view;}
}

生命周期

PS:

onDestroyView函数一般在当前UI界面不需要显示时才会调用。而切回主屏幕不会导致UI销毁所以不调用该函数。onCreateView相反。

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

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

相关文章

Fannel和Calico

一 1、路由器下面每一个端口都是一个vlan,隔离了广播包 192.168.1.0和192.168.2.0他们属于不同的vlan,没有三层交换机或者路由器,他们通不了信 不在同一个vlan,也就是子网,包就会走向网关(也就是路由器那里,路由器有路由表。查看目的地192.168.2.0在b口,从b口出去vlan…

Python编程技巧揭秘:深入理解Lambda函数,如何使用匿名函数简化你的代码

文章目录 1. Lambda函数2. 在实际应用中使用Lambda2.1 使用Lambda函数进行列表排序2.2 在高阶函数中使用Lambda 3. Lambda的局限性和注意点 在这篇文章中&#xff0c;将深入探讨Python中的Lambda函数&#xff0c;这是一种强大的编程工具&#xff0c;可以以更简洁、高效的方式编…

Java基于微信小程序的讲座预约系统的研究与实现,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

PCDN与边缘计算的集成解决方案

PCDN与边缘计算的集成解决方案 在数字化时代&#xff0c;内容的快速、安全地传递至用户变得至关重要。无论是媒体、教育还是其他领域&#xff0c;所有这些行业都需要强大的技术支持以保证信息的实时更新和安全传输。PCDN&#xff08;Peer Content Delivery Network&#xff0c…

c++——类和对象(1)构造,析构函数

类的六个默认函数 如果一个类当中没有成员的话&#xff0c;那叫空类&#xff0c;实际上空类有6个编译器默认生成的函数成员 默认成员函数&#xff1a;没有显示实现&#xff0c;编译器生成的成员函数称为默认成员函数 1&#xff0c;构造函数与构析函数 1.1构造函数的概念 构造…

【MATLAB源码-第194期】基于matlab的MB-OFDM仿真,超宽带(UWB)无线传输。对比LS/DFT及其改进算法。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 一、无线通信的基本原理 无线通信是通过空气或其他介质传播电磁波来传输信息的技术。这种通信方式的核心在于电磁波&#xff0c;它能够在没有物理连接的情况下传输数据。无线通信的基本流程包括&#xff1a; 信号的生成&am…

python使用uiautomator2操作真机(oppo a9x)

环境&#xff1a; python3.8.10&#xff0c;oppo a9x(6G,128g)&#xff0c;版本android 11。 之前写过文章&#xff1a; python使用uiautomator2操作真机&#xff08;荣耀10青春版&#xff09;_python uiautomator2 控制真机-CSDN博客 python使用uiautomator2操作真机&…

c语言之字符串的集合存放形式

采用指针分配的二维数组与直接定义的二维数组&#xff0c;sizeof的不同 采用指针分配的二维数组&#xff1a; 它的遍历方式是&#xff1a; 上面这个是分配二级指针的地址&#xff0c;二级指针就是一片可以用来分配一级指针空间的地址&#xff0c;然后指针寻址本来就可以当成数组…

K8s 部署 MySQL 8.0.20 主从复制结构

一、K8s 部署 MySQL 安装规划 组件replicas类型mysql-master1StatefulSetmysql-slave1StatefulSet 使用 k8s 版本为&#xff1a;v1.18.0 。 本次使用 OpenEBS 来作为存储引擎&#xff0c;OpenEBS 是一个开源的、可扩展的存储平台&#xff0c;它提供了一种简单的方式来创建和…

老阳闲聊|怎么在Temu电商平台上赚钱?

随着互联网技术的飞速发展&#xff0c;电商平台如雨后春笋般涌现&#xff0c;其中Temu电商平台以其独特的商业模式和广阔的市场前景&#xff0c;吸引了众多创业者和商家的目光。那么&#xff0c;如何在Temu电商平台上赚钱呢?本文将为您详细解析。 首先&#xff0c;了解Temu电商…

(2022级)成都工业学院数据库原理及应用实验七: 数据库安全

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、成品仅提供参考 3、如果成品不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 Navicat Premium 16 Mysql 8.0.36 实验要求 1、创建数据库hospital,在hospital数据库中创建科室表De…

【C++】日期类Date(详解)

&#x1f525;个人主页&#xff1a;Forcible Bug Maker &#x1f525;专栏&#xff1a;C 目录 前言 日期类 日期类实现地图 获取某年某月的天数&#xff1a;GetMonthDay 检查日期合法&#xff0c;构造函数&#xff0c;拷贝构造函数&#xff0c;赋值运算符重载及析构函数…