Kotlin四大组件中的broadcast广播
作者:go2coding 发布时间:2023-07-08 00:44:08
在上一章中,有个问题可能大家都没有注意,Acitivity
在使用startActivityForResult
后,可以给另一个的Acitivity
或者Fragment
进行数据参数的传递,可以回去也可以回来。但如果中间要进行数据的交换,使用startActivityForResult
是不能够做到的。
最常见的一种情况是Acitivity
中启动 碎片Fragmen
的时候,可以通过参数的方式进行传递,但碎片Fragmen
要传回来数据,就没那么容易了。
在Android
中,可以使用 Android
中四大组件之一的Broadcast
,我们叫他广播。这一节的例子就是展示怎么在碎片Fragmen
和Acitivity
中的通讯问题,我们会建立一个Acitivity
和 Fragmen
,在Fragmen
中发送广播,Acitivity
中接受,这样就可以达到双向交流的目的。
创建Fragmen 碎片
建立起Fragmen
碎片,在Fragmen
中发送广播给Acitivity
,让Acitivity
处理相应的广播命令。
fun newInstance(position:Int,image_id:Int,desc:String):BroadcastFragment {
val bundle = Bundle()
bundle.putInt("position",position)
bundle.putInt("image_id",image_id)
bundle.putString("desc",desc)
val fragment = BroadcastFragment()
fragment.arguments = bundle
return fragment
}
在建立Fragmen
的时候,Acitivity
通过参数的形式,把数据传递给Fragmen
,这里就有了一次数据参数的传递过程。
主界面中添加ViewPager
我们建立ViewPager
的目的,是这ViewPager
中添加 Fragmen
,来模拟 Fragmen
和Acitivity
之间的通信问题。
<androidx.viewpager.widget.ViewPager
android:id = "@+id/vp_content"
android:layout_width="match_parent"
android:layout_height="550dp">
<androidx.viewpager.widget.PagerTabStrip
android:id = "@+id/pts_tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</androidx.viewpager.widget.ViewPager>
建立起适配器,来加载Fragmen
碎片。
class BroadcastPagerAdapter(fm:FragmentManager,private val goodsList: MutableList<GoodsInfo>):FragmentStatePagerAdapter(fm) {
override fun getCount(): Int {
return goodsList.size
}
override fun getItem(position: Int): Fragment {
return BroadcastFragment.newInstance(position,goodsList[position].pic,goodsList[position].desc)
}
override fun getPageTitle(position: Int): CharSequence? {
return goodsList[position].name
}
}
在主界面中,加载适配器。
pts_tab.setTextSize(TypedValue.COMPLEX_UNIT_SP,20f)
vp_content.adapter = BroadcastPagerAdapter(supportFragmentManager,GoodsInfo.defaultList)
vp_content.currentItem = 0
到这里,界面该有的控件就建立起来。
创建广播
发送广播和传递数据都是用Intent
,先建立起BroadcastReceiver
,
private var bgChangeReceiver:BgChangeReceiver? = null
private inner class BgChangeReceiver:BroadcastReceiver(){
override fun onReceive(p0: Context?, p1: Intent?) {
}
}
注册广播,
override fun onStart() {
super.onStart()
bgChangeReceiver = BgChangeReceiver()
val filter = IntentFilter(BroadcastFragment.EVENT)
activity?.registerReceiver(bgChangeReceiver,filter)
}
override fun onStop() {
activity?.unregisterReceiver(bgChangeReceiver)
super.onStop()
}
新建一个按钮,来发送广播,
btn_cast.setOnClickListener {
val intent = Intent(BroadcastFragment.EVENT)
intent.putExtra("color",1)
activity?.sendBroadcast(intent)
}
小结
Android
中四大 组件之一的 Broadcast
这里也简单接受了下,如果之前有接触过windows编程的话,你会接触过sendmessage
的函数,其实他就是一种广播,跟Android
一样没有什么两样,都是为了组件和组件,界面和界面直接的沟通。
来源:https://blog.csdn.net/weixin_40425640/article/details/127993563


猜你喜欢
- 步骤:1、遍历D盘Source文件夹找出所有名称包含LTE的文件,文件路径存放到List<string>中2、遍历List<
- 缘起随着 App 的成长,我们难免会遇到以下这些需求:H5 跳原生界面Notification 点击调相关界面根据后台返回数据跳转界面,例如
- 一般来说一个 HTML 文档有很多标签,比如“<html>”、“<body>”、“<table>”等,想
- 今天来给大家介绍一个非常有用的Studio Tips,有些时候我们在一个方法内部写了过多的代码,然后想要把一些代码提取出来再放在一个单独的方
- 简单介绍下功能1.每隔一段时间(比如1分钟)在京东手机每日一秒杀页面提取产品(手机)链接。 http://sale.360buy.com/a
- 这篇文章主要介绍了Spring Boot2.X国际化文件编写配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 今天在网上看到了一个关于读取网络文件的小视频,觉得不错,拿来与大家分享思路具体的思路比较的简单,但是思想非常的单纯。那就是输入一个网址,点击
- 1,实现效果 2,实现代码:【1】 shape_drawable.xml 
- 某些情况下,我们需要在项目中对多种任务分配不同的线程池进行执行。从而通过监控不同的线程池来控制不同的任务。为了达到这个目的,需要在项目中配置
- 文件上传和下载是web开发中常遇到的问题,这几天在做一个项目又用到了文件下载,之前也零零散散记了些笔记,今天来做一下整理。文件上传还有待进一
- 前言单例模式,是工作中比较常见的一种设计模式,通常有两种实现方式,懒汉式和饿汉式。但是这两种实现方式存在一些问题。懒汉式需要在多线程环境下使
- 今天谈一下C#(WinForm)如何发送带附件的电子邮件!废话少说,先截图伺候:首先C#发送邮件需要smtp服务的支持,我也不知道是不是C#
- File 类:文件和目录路径名的抽象表示。注意:File 类只能操作文件的属性,文件的内容是不能操作的。1、File 类的字段我们知道,各个
- 打包与运行在项目开发完成之后,可以直接用IDEA将其打包成JAR包运行,也可以打包成WAR包运行以便在多服务器、多配置环境下运行。双击cle
- java 引用类型的数据传递的是内存地址java中引用类型的数据,传递的是内存地址,像类,数组,接口,String等等都是引用类型!看下面的
- Android中子线程和UI线程之间通信的详细解释 1.在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个
- 看代码吧~package com.mtpc.admin.controller.exportSql;import ch.qos.logback
- 前言本文主要学习函数的相关内容。1、函数是什么? * 中对函数的定义:子程序在计算机科学中,子程序(英语:Subroutine, proc
- 本文实例讲述了Android提高Service优先级的方法。分享给大家供大家参考,具体如下:Android 系统对于内存管理有自己的一套方法
- 存储的可选项Android 的文件系统类似于其他平台的基于磁盘的文件系统。包括以下几种存储类别:App 私有的存储空间共享的存储空间Pref