Activity 通过Bundle与Fragment通信

目录

  • 基础夯实:
    • 一、Activity与Fragment的关系
    • 二、通信场景
    • 三、通信方式
      • 1. 通过接口回调
      • 2. 通过Bundle
      • 3. 其他方式
    • 四、注意事项
  • 效果展示:
  • 实现功能:
  • 核心代码:
    • MainActivity
    • BlankFragment

基础夯实:

Activity与Fragment通信是Android开发中非常基础且重要的一个环节。以下是对Activity与Fragment通信基础理论的详细解释:

一、Activity与Fragment的关系

Activity是Android应用中的一个单独屏幕,可以包含布局和多个Fragment。
Fragment代表了Activity用户界面的一部分,可以嵌入到Activity中或者在多个Activity之间进行复用。
Fragment的生命周期与Activity绑定,但它也有自己独立的生命周期。

二、通信场景

Activity与Fragment之间的通信通常包括数据传递、状态变化通知、生命周期控制等多种情形,以实现整个UI界面的协调和交互。例如,当实现一个图文分享功能时,点击分享按钮会弹出ShareDialogFragment的弹窗页面,此时ShareDialogFragment需要获取当前图文的内容进行分享,这就需要Activity将图文内容传递给Fragment。

三、通信方式

1. 通过接口回调

定义接口:在Fragment中定义一个接口,包含将要被通信双方实现和调用的方法。
实现接口:Activity实现这个接口,并在适当的时候调用Fragment中的方法。
实例化接口:在Fragment的onAttach()方法中,通过将作为参数传入onAttach()的Activity做类型转换来实例化一个接口实例。
调用接口方法:Fragment通过调用接口中的方法来进行通信。
这种方式允许Fragment在不直接依赖Activity的情况下进行通信,提高了代码的解耦性和Fragment的可复用性。

2. 通过Bundle

当Activity需要向Fragment传递数据时,可以将数据放入Bundle中,然后在创建Fragment时通过setArguments()方法将Bundle传递给Fragment。
Fragment通过getArguments()方法获取传递过来的Bundle,并从中提取数据。
这种方式适用于在创建Fragment时传递数据,且这些数据在Fragment的生命周期内不会改变。

3. 其他方式

除了接口回调和Bundle外,还可以通过广播(Broadcast)、EventBus、ViewModel等方式实现Activity与Fragment之间的通信。这些方式各有优缺点,开发者可以根据具体需求选择合适的通信方式。

四、注意事项

在进行Fragment与Activity通信时,要确保Fragment已经正确附加到Activity上,否则可能会引发空指针异常。
为了保证Fragment的可复用性,应避免在Fragment中直接调用其他Fragment或Activity的方法。
在使用Bundle传递数据时,要注意数据的大小和类型限制。
总之,Activity与Fragment之间的通信是Android开发中非常基础且重要的一个环节。掌握多种通信方式并灵活运用,可以构建出更加高效和可复用的Android应用。

效果展示:

在这里插入图片描述

实现功能:

Activity 通过Bundle与Fragment通信,实现点击change,fragment中打印你好的功能

核心代码:

MainActivity

package com.example.application1;import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
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 implements View.OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 设置活动的内容视图setContentView(R.layout.activity_main);// 初始化按钮并设置点击监听器Button button = findViewById(R.id.btn);button.setOnClickListener(this);Button button2 = findViewById(R.id.btn_2);button2.setOnClickListener(this);}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.btn:// 当按钮被点击时,替换 FragmentBundle bundle = new Bundle();bundle.putString("message","你好");BlankFragment1 bf = new BlankFragment1();bf.setArguments(bundle);replaceFragment(bf);break;case R.id.btn_2:// 当按钮被点击时,替换 FragmentreplaceFragment(new ItemFragment());break;}}// 动态切换 Fragment 的方法private void replaceFragment(Fragment fragment) {// 获取 FragmentManagerFragmentManager fragmentManager = getSupportFragmentManager();// 开始事务FragmentTransaction transaction = fragmentManager.beginTransaction();// 替换 Fragmenttransaction.replace(R.id.framelayout, fragment);transaction.addToBackStack(null);// 提交事务transaction.commit();}
}

BlankFragment

package com.example.application1;import android.os.Bundle;import androidx.fragment.app.Fragment;import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;/*** A simple {@link Fragment} subclass.* Use the {@link BlankFragment1#newInstance} factory method to* create an instance of this fragment.*/
public class BlankFragment1 extends Fragment {private static final String TAG = "BlankFragment1";// TODO: Rename parameter arguments, choose names that match// the fragment initialization parameters, e.g. ARG_ITEM_NUMBERprivate static final String ARG_PARAM1 = "param1";private static final String ARG_PARAM2 = "param2";// TODO: Rename and change types of parametersprivate String mParam1;private String mParam2;public BlankFragment1() {// Required empty public constructor}/*** Use this factory method to create a new instance of* this fragment using the provided parameters.** @param param1 Parameter 1.* @param param2 Parameter 2.* @return A new instance of fragment BlankFragment1.*/// TODO: Rename and change types and number of parameterspublic static BlankFragment1 newInstance(String param1, String param2) {BlankFragment1 fragment = new BlankFragment1();Bundle args = new Bundle();args.putString(ARG_PARAM1, param1);args.putString(ARG_PARAM2, param2);fragment.setArguments(args);return fragment;}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Bundle bundle = this.getArguments();String string = bundle.getString("message");Log.d(TAG,"onCreate"+ string);if (getArguments() != null) {mParam1 = getArguments().getString(ARG_PARAM1);mParam2 = getArguments().getString(ARG_PARAM2);}}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_blank1, container, false);}
}

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

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

相关文章

体育活动赛事报名马拉松微信小程序开发

功能描述 体育活动赛事报名马拉松微信小程序,该项目是一个体育活动报名小程序,主要功能有活动报名、扫码签到、签到积分、排行奖励、积分兑换等功能。 用户端🔶登录:◻️1.微信授权登录 ◻️2.手机号码授权 🔶首页&am…

管家婆ERP集成金蝶云星空(管家婆主供应链)

源系统成集云目标系统 金蝶云星空介绍 金蝶云星空是金蝶软件(中国)有限公司研发的新一代战略性企业管理软件,致力于为企业提供端到端的供应链整体解决方案,它可以帮助企业构建敏捷供应链体系,降低供应链成本&a…

信捷 PLC C语言 POU 指示灯交替灭0.5秒亮0.5秒(保持型定时器)

1.在全局变量表中定义2个定时器变量timer_1,timer_2 名称 类型 timer_1 TMR_A_FB False -- False False timer_2 TMR_A_FB False -- False False ot2 BOOL False -- False False ot2表示指示灯 …

一文了解Mamba和选择性状态空间模型 (SSM)

一文了解Mamba和选择性状态空间模型 (SSM 前言SSMSSM简介深度学习中的SSM定义离散化SSM的递归方法SSM梯形法的基本原理离散过程重新整理并推导离散更新公式离散化后的矩阵表示 SSM卷积基本原理分析第一个方程分析第二个方程 Mamba:一种深度学习架构,专注…

SQL注入学习

SQL注入概念及产生原因 当web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。

【前端】深入浅出 - TypeScript 的详细讲解

TypeScript 是一种静态类型编程语言,它是 JavaScript 的超集,添加了类型系统和编译时检查。TypeScript 的主要目标是提高大型项目的开发效率和可维护性。本文将详细介绍 TypeScript 的核心概念、语法、类型系统、高级特性以及最佳实践。 1. TypeScript…

【Linux】Linux环境基础开发工具使用(下)

【Linux】Linux环境基础开发工具使用(下) 🥕个人主页:开敲🍉 🔥所属专栏:Linux🍊 🌼文章目录🌼 4. Linux编辑器--gcc /g的使用 4.1 背景知识 4.2 gcc如何完成 4.2.1 预处理 4.2.2 编…

GPU性能测试,环境搭建笔记,transformers/huggingface_hub改国内源,BertLayer import 报错

代码,以及测试方案使用的是沐神的代码 github的代码: 1. 环境搭建 首先是安装torch 这是我的pytorch版本 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124使用pip指令安装transformers transformers…

PR剪辑视频去重消重色彩叠加特效模板

采用现代设计,灵感来自鲜艳的色彩和动态的灯光效果。包含颜色控制选项,能够轻松地调整效果以匹配您的视频风格。具有图像和视频替换功能。 易用性:适合所有经验水平的用户,包括初学者。 调色板自定义:完全控制颜色以匹…

采购管理软件选择攻略:别忽视这些注意事项

企业在选择采购管理软件时必须谨慎,因为这直接关系到简化采购流程、成本控制、风险降低和效率提升等多个方面。面对内众多的软件选项和竞争目标,采购团队可能难以做出正确的选择。别担心,本文将提供一些建议和注意事项。 采购管理软件的重要性…

关于 npm 更新镜像源问题

npm(Node Package Manager),是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。) 查看当前npm版本 npm -v 10.9.0 执行以下命令报错 npm install --registryhttp…

【OceanBase 诊断调优】—— OceanBase 数据库统计信息被禁用,状态为 broken 的原因和解决方法

问题现象 因为人为因素导致部分统计信息函数未安装,自动统计信息触发执行长期失败。重新安装统计信息相关函数后,发现仍然无法正常自动统计信息收集,统计信息状态为 broken。 问题原因 统计信息 JOB 收集失败次数达到 16 次会直接禁用 JOB …

2024腾讯云双十一必抢清单:省钱、省心、省力的购买攻略

一、前言 大家好,我是 Neo!一年一度的双十一购物狂欢节又到了!在这个特别的日子,腾讯云也推出了超值的优惠活动。最近我正好在做自己的小程序项目,需要用到服务器,特意关注了这次活动,看看有没…

业财税深度融合,金鹰国际集团以数字化打造硬实力

数字经济时代,企业数字化转型已成必然,越来越多的企业踏浪前行,加速探索全领域的数字化转型,获得竞争优势。数字化技术的快速发展也加速了税收征管改革进程,财务数字化成为企业转型升级的有力抓手,助力优化…

Spring Boot 多环境开发配置详解:Profiles 的使用指南

目录 前言1. Profiles 简介1.1 什么是 Profiles?1.2 Profiles 的应用场景 2. 单文件配置方式2.1 使用三横杠 --- 分隔配置2.2 指定哪个环境的配置生效 3. 多文件配置方式3.1 配置文件的创建与命名3.2 多文件配置的优点 4. Profiles 分组管理4.1 Profile 分组的配置4…

emp.dll文件丢失的几种方法-常见问题

emp.dll文件在Windows系统中扮演着重要的角色,其作用不仅限于单一的应用程序或游戏。以下是emp.dll在系统中的几种作用: 图形渲染与游戏支持:emp.dll可能集成了高效的渲染引擎,支持复杂的3D图形和动画,为玩家提供沉浸…

永久免费!星火大模型接口源码分享(支持上下文、连续对话和历史对话保存)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 星火大模型 📒🌟 接口功能📜 源码分享🎯 使用方法⚓️ 相关链接 ⚓️📖 介绍 📖 你是否在寻找一款国产的、永久免费的大模型接口?想要在自己的项目中轻松集成强大的自然语言处理能力?今天,将为你分享一份免费的星…

小型内衣洗衣机哪个牌子好?五大超值优等品速来围观!

小型洗衣机的存在无疑是懒人的福音,它帮助了许多忙碌的人们解决了洗衣烦恼。尤其对于年龄较小的婴幼儿需要勤换衣、洗衣的时候,它的功能就显得尤为重要了,同时还能够用于清洗大人的内衣裤、袜子这一系列的贴身衣物。小型洗衣机通常用于宿舍、…

取代产品岗,又一新兴岗位在崛起!这才是产品经理未来5年最好的就业方向!

这是我入行产品经理的第1007天: 每天都是整理需求、开会、写文档、协调资源 被开发、运营diss一通,顺便为产品“背个锅” 熬夜加班做出来的产品,业务团队还是不愿意用…… 更让人头秃的是,干了3年,好像到了“职…

打造自己的RAG解析大模型:(可商用)智能文档服务上线部署

通用版面分析介绍 版面解析是一种将文档图像转化为机器可读数据格式的技术,广泛应用于文档管理和信息提取等领域。通过结合OCR、图像处理和机器学习,版面解析能够识别文档中的文本块、图片、表格等版面元素,最终生成结构化数据,大…