Kotlin四大組件中的broadcast廣播
在上一章中,有個(gè)問(wèn)題可能大家都沒(méi)有注意,Acitivity
在使用startActivityForResult
后,可以給另一個(gè)的Acitivity
或者Fragment
進(jìn)行數(shù)據(jù)參數(shù)的傳遞,可以回去也可以回來(lái)。但如果中間要進(jìn)行數(shù)據(jù)的交換,使用startActivityForResult
是不能夠做到的。
最常見的一種情況是Acitivity
中啟動(dòng) 碎片Fragmen
的時(shí)候,可以通過(guò)參數(shù)的方式進(jìn)行傳遞,但碎片Fragmen
要傳回來(lái)數(shù)據(jù),就沒(méi)那么容易了。
在Android
中,可以使用 Android
中四大組件之一的Broadcast
,我們叫他廣播。這一節(jié)的例子就是展示怎么在碎片Fragmen
和Acitivity
中的通訊問(wèn)題,我們會(huì)建立一個(gè)Acitivity
和 Fragmen
,在Fragmen
中發(fā)送廣播,Acitivity
中接受,這樣就可以達(dá)到雙向交流的目的。
創(chuàng)建Fragmen 碎片
建立起Fragmen
碎片,在Fragmen
中發(fā)送廣播給Acitivity
,讓Acitivity
處理相應(yīng)的廣播命令。
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
的時(shí)候,Acitivity
通過(guò)參數(shù)的形式,把數(shù)據(jù)傳遞給Fragmen
,這里就有了一次數(shù)據(jù)參數(shù)的傳遞過(guò)程。
主界面中添加ViewPager
我們建立ViewPager
的目的,是這ViewPager
中添加 Fragmen
,來(lái)模擬 Fragmen
和Acitivity
之間的通信問(wèn)題。
<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>
建立起適配器,來(lái)加載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
到這里,界面該有的控件就建立起來(lái)。
創(chuàng)建廣播
發(fā)送廣播和傳遞數(shù)據(jù)都是用Intent
,先建立起BroadcastReceiver
,
private var bgChangeReceiver:BgChangeReceiver? = null private inner class BgChangeReceiver:BroadcastReceiver(){ override fun onReceive(p0: Context?, p1: Intent?) { } }
注冊(cè)廣播,
override fun onStart() { super.onStart() bgChangeReceiver = BgChangeReceiver() val filter = IntentFilter(BroadcastFragment.EVENT) activity?.registerReceiver(bgChangeReceiver,filter) } override fun onStop() { activity?.unregisterReceiver(bgChangeReceiver) super.onStop() }
新建一個(gè)按鈕,來(lái)發(fā)送廣播,
btn_cast.setOnClickListener { val intent = Intent(BroadcastFragment.EVENT) intent.putExtra("color",1) activity?.sendBroadcast(intent) }
小結(jié)
Android
中四大 組件之一的 Broadcast
這里也簡(jiǎn)單接受了下,如果之前有接觸過(guò)windows編程的話,你會(huì)接觸過(guò)sendmessage
的函數(shù),其實(shí)他就是一種廣播,跟Android
一樣沒(méi)有什么兩樣,都是為了組件和組件,界面和界面直接的溝通。
到此這篇關(guān)于Kotlin四大組件中的broadcast廣播的文章就介紹到這了,更多相關(guān)Kotlin broadcast內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android實(shí)現(xiàn)引導(dǎo)頁(yè)的圓點(diǎn)指示器
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)引導(dǎo)頁(yè)的圓點(diǎn)指示器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06Android實(shí)現(xiàn)圖片轉(zhuǎn)高斯模糊以及高斯模糊布局
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)圖片轉(zhuǎn)高斯模糊的方法,以及高斯模糊布局,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Android PopupWindow 點(diǎn)擊外面取消實(shí)現(xiàn)代碼
這篇文章主要介紹了Android PopupWindow 點(diǎn)擊外面取消實(shí)現(xiàn)代碼,本文直接給出核心實(shí)現(xiàn)代碼,代碼中包含注釋,需要的朋友可以參考下2015-04-04Android實(shí)現(xiàn)簡(jiǎn)單畫中畫功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡(jiǎn)單畫中畫功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08Android集成GreenDao數(shù)據(jù)庫(kù)的操作步驟
這篇文章主要介紹了Android集成GreenDao數(shù)據(jù)庫(kù),使用數(shù)據(jù)庫(kù)存儲(chǔ)時(shí)候,一般都會(huì)使用一些第三方ORM框架,比如GreenDao,本文分幾步給大家介紹Android集成GreenDao數(shù)據(jù)庫(kù)的方法,需要的朋友可以參考下2022-10-10Android開發(fā)中方向傳感器定義與用法詳解【附指南針實(shí)現(xiàn)方法】
這篇文章主要介紹了Android開發(fā)中方向傳感器定義與用法,結(jié)合實(shí)例形式分析了Android方向傳感器的功能、定義與使用方法,并附帶基于方向傳感器實(shí)現(xiàn)指南針功能的方法,需要的朋友可以參考下2017-11-11Android列表組件ListView使用詳解之動(dòng)態(tài)加載或修改列表數(shù)據(jù)
今天小編就為大家分享一篇關(guān)于Android列表組件ListView使用詳解之動(dòng)態(tài)加載或修改列表數(shù)據(jù),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03