Kotlin四大组件中的broadcast广播

作者:go2coding 时间:2023-07-08 00:44:08 

在上一章中,有个问题可能大家都没有注意,Acitivity 在使用startActivityForResult后,可以给另一个的Acitivity 或者Fragment 进行数据参数的传递,可以回去也可以回来。但如果中间要进行数据的交换,使用startActivityForResult 是不能够做到的。

最常见的一种情况是Acitivity 中启动 碎片Fragmen 的时候,可以通过参数的方式进行传递,但碎片Fragmen要传回来数据,就没那么容易了。

Android 中,可以使用 Android 中四大组件之一的Broadcast,我们叫他广播。这一节的例子就是展示怎么在碎片FragmenAcitivity 中的通讯问题,我们会建立一个AcitivityFragmen ,在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,来模拟 FragmenAcitivity 之间的通信问题。

<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

到这里,界面该有的控件就建立起来。

Kotlin四大组件中的broadcast广播

创建广播

发送广播和传递数据都是用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)
       }

Kotlin四大组件中的broadcast广播

小结

Android中四大 组件之一的 Broadcast 这里也简单接受了下,如果之前有接触过windows编程的话,你会接触过sendmessage的函数,其实他就是一种广播,跟Android一样没有什么两样,都是为了组件和组件,界面和界面直接的沟通。

来源:https://blog.csdn.net/weixin_40425640/article/details/127993563

标签:Kotlin,broadcast,广播
0
投稿

猜你喜欢

  • spring cloud整合ribbon问题及解决方案

    2023-07-25 04:24:49
  • Java实现带GUI的气泡诗词效果

    2022-09-12 18:04:48
  • C#自定义签名章实现方法

    2022-08-02 05:22:37
  • Spring Boot用户注册验证的实现全过程记录

    2023-01-03 01:58:34
  • C#中的一些延时函数

    2023-11-29 04:33:30
  • Java通过底层原码了解数组拷贝

    2021-10-07 12:47:47
  • Android实现时钟特效

    2022-09-08 01:43:22
  • SpringBoot使用Spring Security实现登录注销功能

    2023-01-05 13:19:54
  • Java实现窗体程序显示日历

    2022-09-14 11:01:59
  • 微信js sdk invalid signature签名错误问题的解决方法分析

    2021-07-26 02:26:47
  • IDEA设置maven修改settings.xml配置文件无法加载仓库的解决方案

    2023-08-23 22:39:35
  • 创建execl导入工具类的步骤

    2022-03-11 11:41:09
  • SpringMVC一步到位精通拦截器

    2023-11-25 01:47:45
  • C#多线程中的互斥锁Mutex

    2022-04-26 06:11:55
  • SpringCloud开发课程查询功能

    2022-04-21 14:22:46
  • springboot编程式事务TransactionTemplate的使用说明

    2022-03-01 15:19:37
  • C#并行编程之Task任务

    2023-05-30 16:54:41
  • 一篇文章带你了解Java SpringMVC返回null

    2023-11-24 15:18:03
  • java反射之通过反射了解集合泛型的本质(详解)

    2023-02-04 03:10:25
  • Spring Security Remember me使用及原理详解

    2023-10-28 04:59:56
  • asp之家 软件编程 m.aspxhome.com