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