安卓APP_ Fragment(2)—— Activity与Fragment的通信
摘自:安卓APP_ Fragment(2)—— Activity与Fragment的通信
作者:丶PURSUING
发布时间: 2021-04-16 17:23:44
网址:https://blog.csdn.net/weixin_44742824/article/details/115743009
目录
- Activity与Fragment的通信
- (1)原生方案1:Bundle。
- 具体细节在代码中呈现
- (2)方案2:Java语言中类与类自己通信常用方案:接口
- (3)方案3:第三方架构
Activity与Fragment是两个独立类,负责UI的展示,那他们如何进行通信呢?
Activity与Fragment的通信
(1)原生方案1:Bundle。
可以理解为通信时使用的通用工具,可以保存数据的独立的类。
在 安卓APP_ Fragment(1) 篇章的基础上,沿用原来的例子,演示在动态添加fragment下,Activity如何向Fragment发送信息。下图的my name is zhua
字符串是从Activity中向fragment传递的信息,fragment收到后并打印出来。
具体实现:
(1)在MainActivity中bundle对象的创建并且与fragment绑定
在对应的fragment.java
中使用并打印
进阶题外话:如何传输javaBean?不能直接传,但是可以把Bean变成某一个key,
这个key对应的是parcelable,parcelable就可以携带javaBean
具体细节在代码中呈现
activity_main.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"><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/btn_1"android:text="@string/change"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/btn_2"android:text="@string/replace"/><!-- 除去按钮,剩余的空间都是FrameLayout--><FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/fm"android:background="@color/teal_200"/></LinearLayout>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button1 = findViewById(R.id.btn_1);button1.setOnClickListener(this);Button button2 = findViewById(R.id.btn_2);button2.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_1:Bundle bundle = new Bundle();//将Activity中的信息放进bundlebundle.putString("message", "my name is zhua");//需要实例化一个BlankFragment1对象bfBlankFragment1 bf = new BlankFragment1();//数据传入bf中bf.setArguments(bundle);//动态切换fragmentreplaceFragment(bf);break;case R.id.btn_2:replaceFragment(new ItemFragment());}}//完成动态切换fragmentprivate void replaceFragment(Fragment fragment) {FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction transaction = fragmentManager.beginTransaction();transaction.replace(R.id.fm, fragment);transaction.commit();}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
BlankFragment.java
public class BlankFragment1 extends Fragment {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//这个getArguments返回的是在MainActivity中传入的bundleBundle bundle = this.getArguments();//获取bundle里面保存的内容String string = bundle.getString("message");//在fragment中打印从Activity中传递来的信息Log.e("zhua", "onCreate: "+string);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_blank1, container, false);}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
flagment_blank1.xml
<?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=".BlankFragment1"><!-- TODO: Update blank fragment layout --><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:background="#ffff00"android:textSize="40dp"android:text="@string/hello_blank_fragment" /></FrameLayout>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
(2)方案2:Java语言中类与类自己通信常用方案:接口
面向接口编程:用接口实现两者的通信,消息互传。(从老师的描述中可以发现不好用,先不学,不学了。)
(3)方案3:第三方架构
当Activity发送消息的时候,Fragment根据需要(对Activity这个消息“感不感兴趣”),选择接收还是不接受。
要用到其他的通信方案,即编译器已经封装好的接口,如eventBus,LiveData…
在这样的方案里面包含了一个设计模式,叫观察者模式(或者叫发布订阅模式)。比如我Fragment作为信息的接收方,当Activity信息发生变化的且是我需要的时候,我就会收录这个信息。
进阶内容,后续再做补充。
安卓APP_ Fragment(2)—— Activity与Fragment的通信相关推荐
- Fragment与Activity之间的相互通信
https://blog.csdn.net/u012702547/article/details/49786417 https://blog.csdn.net/carson_ho/article/de ...
- android 状态栏一体化 fragment,单Activity多Fragment动态修改状态栏颜色功能
目录介绍 1.关于如何集成 2.关于如何使用 3.关于鸣谢 4.关于版本更新说明 5.关于其他介绍 0.说明 状态栏工具类,应该可以满足绝大多数的使用场景.具体可以参考代码案例,欢迎star!! 1. ...
- activity改成fragment android,Activity转换为Fragment
Activity中加载不同的fragment / Fragment中加载不同的fragment 主Activity中加载(切换)多个fragment(也可以理解为activity 尽管Fragmen ...
- Activity和Fragment生命周期变化
情形一:启动应用加载Activity和Fragment Activity::onCreate Fragment::onAttach Fragment::onCreate Fragment::onCre ...
- 安卓APP_ Fragment(4)—— Fragment + ViewPager2 模拟微信首页 (1)两者联动实现翻页
摘自:安卓APP_ Fragment(4)-- Fragment + ViewPager2 模拟微信首页 (1)两者联动实现翻页 作者:丶PURSUING 发布时间: 2021-04-20 17:46 ...
- 安卓APP_ Fragment(3)—— Fragment的生命周期
摘自:安卓APP_ Fragment(3)-- Fragment的生命周期 作者:丶PURSUING 发布时间: 2021-04-16 22:32:12 网址:https://blog.csdn.ne ...
- 安卓APP_ Fragment(1)—— Fragment概念、基础用法、动态变换、管理栈
摘自:安卓APP_ Fragment(1)-- Fragment概念.基础用法.动态变换.管理栈 作者:丶PURSUING 发布时间: 2021-04-15 23:32:31 网址:https://b ...
- 安卓APP_ Fragment(5)—— Fragment + ViewPager2 模拟微信首页 (2)两者联动翻页
摘自:安卓APP_ Fragment(5)-- Fragment + ViewPager2 模拟微信首页 (2)两者联动实现翻页 作者:丶PURSUING 发布时间: 2021-04-22 00:11 ...
- WaveSwipeRefreshLayout实现微信热文精选,微信热文安卓app版,activity中viewpager套fragment
微信热文安卓app版,微信热文精选. 安卓结合HTML5快速开发app应用,比原生写出来的效果还要好.极大的减小安卓app应用大小. 代码示例(演示apk):http://download.csdn. ...
最新文章
- 【深入浅出Node.js系列十一】Node.js开发框架Express4.x
- 学习Kotlin(三)类和接口
- HTML5 required是必填
- java中使用es的dsl_基于DSL的基于图论的Java程序中输入图数据的方法
- Java终于可以加入字符串
- python from numpy import,python zeros()使用(from numpy import *)-Go语言中文社区
- C++一天一个程序(五)
- Linux下nm和ldd 命令
- [vue] vue使用v-for遍历对象时,是按什么顺序遍历的?如何保证顺序?
- mysql 无法处理非法数据_MySQL 处理非法数据
- apache php 重写url无效,apache用rewrite重写url时出现问题
- Qt程序缺少dll解决方案
- Telnet配合netty打印数据(springboot+netty)
- 让华泰浮盈10亿美金的AssetMark-统包资产管理平台价值几何?
- Linux的操作系统下载及安装
- 02-最基本的SELECT语句
- 大班音乐机器人反思_大班音乐活动机器人
- linux中u盘驱动程序编写,Linux下的硬件驱动——USB设备(下)(驱动开发部分)...
- [附源码]Java计算机毕业设计SSM房屋租赁管理系统设计
- 融云助力中国企业打造海外云平台
热门文章
- OC Swift混编-Swift.h File not found
- 企业级 Spring Boot 教程 (十四)用restTemplate消费服务
- C++编程经验总结1
- wdk1703+vs2015编译的诡异问题
- 分页探究--Filter+JSTL
- 细说JavaScript对象(1):对象的使用和属性
- 无用的设计模式之装饰者模式
- PHP ThinkPHP学习第一步(搭建及认识ThinkPHP入口文件)
- mysql升级5.5
- 先弄个XML解析器代码抄一抄 慢慢研究 O(∩_∩)O哈哈~