亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

如何利用Kotlin實現極簡回調

2024-07-21 23:03:51
字體:
來源:轉載
供稿:網友

前言

在各種開發場景中,回調都有著廣泛的應用,命名往往是各種Callback和Listener,其中在Android中接觸最早也最常用的可能就是View.OnClickListener了。

 mBtn.setOnClickListener(new View.OnClickListener() {   @Override   public void onClick(View v) {    Log.d("MM","Click");   }  });

不過寫多了也有點煩惱,我只想打印一條日志,卻寫了這么多代碼。不過好在這個接口里面只包含一個方法,但換做一些包含方法數量比較多的回調就顯得比較臃腫了:

 mEdit.addTextChangedListener(new TextWatcher() {   @Override   public void beforeTextChanged(CharSequence s, int start, int count, int after) {       }   @Override   public void onTextChanged(CharSequence s, int start, int before, int count) {   }   @Override   public void afterTextChanged(Editable s) {   }  });

如果你想優化你的代碼,讓它們看起來更簡潔優雅,可以試試Kotlin的中的一些方法。

簡化

先來看下Kotlin中的回調:

  mBtn.setOnClickListener(object :View.OnClickListener{   override fun onClick(v: View?) {    println("Click")   }  })

好像一點也沒簡化嘛,不過因為在 Kotlin 里函數也是參數的一種,在 Java 中只包含一個方法的接口,在 Kotlin 中都可以使用 Lambda 表達式來達成一樣的效果。

 mBtnCallback.setOnClickListener { println("Click") }

是不是簡單很多了,但上面的用法僅適用于接口中只有一個方法的情況,如果存在多個方法的話,當然也可以簡化了:

 mEdit.addTextChangedListener {   beforeTextChanged { text, start, count, after -> println("beforeTextChanged") }   onTextChanged { text, start, before, count -> println("onTextChanged") }   afterTextChanged { text -> println("afterTextChanged") }  }

也可以按需調用其中任意個方法:

 mEdit.addTextChangedListener {   onTextChanged { text, start, before, count -> println("onTextChanged") }  }

不過此處的addTextChangedListener是一個擴展函數,需要我們來自己實現:

inline fun TextView.addTextChangedListener(init: TextWatcherBridge.() -> Unit) = addTextChangedListener(TextWatcherBridge().apply(init))class TextWatcherBridge : TextWatcher { private var beforeTextChanged: ((CharSequence?, Int, Int, Int) -> Unit)? = null private var onTextChanged: ((CharSequence?, Int, Int, Int) -> Unit)? = null private var afterTextChanged: ((Editable?) -> Unit)? = null override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {  beforeTextChanged?.invoke(s, start, count, after) } override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {  onTextChanged?.invoke(s, start, before, count) } override fun afterTextChanged(s: Editable?) {  afterTextChanged?.invoke(s) } fun beforeTextChanged(listener: (CharSequence?, Int, Int, Int) -> Unit) {  beforeTextChanged = listener } fun onTextChanged(listener: (CharSequence?, Int, Int, Int) -> Unit) {  onTextChanged = listener } fun afterTextChanged(listener: (Editable?) -> Unit) {  afterTextChanged = listener }}

原理就是實現一個擴展函數,把我們自己實現的TextWatcherBridge加入到回調中,因為Kotlin支持函數式編程,里面都是高階函數。為了減少性能損耗,擴展函數聲明為內聯函數。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到kotlin教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩精品二区| 国产精品久久久久久久久久久不卡| 国产成人中文字幕| 91精品国产91久久久| 国产精品久久久一区| 国产精品第一页在线| 亚洲二区中文字幕| 国产精品吹潮在线观看| 中文精品99久久国产香蕉| 亚洲成人黄色在线观看| 国产精品av电影| 欧美精品在线网站| 97在线看福利| 久久久av一区| 久久久999国产| 国产日韩中文在线| 久久人人爽人人爽人人片av高清| 国产精品久在线观看| 欧美综合第一页| 最近更新的2019中文字幕| 91网站在线看| 中文字幕日韩免费视频| 亚洲国产精品成人va在线观看| 亚洲男人av在线| 91tv亚洲精品香蕉国产一区7ujn| 国产综合福利在线| 久久人人爽人人爽人人片av高清| 色综合伊人色综合网| 91国内免费在线视频| 久久99国产综合精品女同| 亚洲第一视频在线观看| 日本午夜精品理论片a级appf发布| 欧美精品videossex性护士| 亚洲精品自拍偷拍| 亚洲最大的免费| 92看片淫黄大片看国产片| 久久91亚洲精品中文字幕| 亚洲精选一区二区| 久久久久久一区二区三区| 91精品久久久久久久久久久| 在线播放日韩精品| 欧美精品精品精品精品免费| 国产精品www色诱视频| 欧美日韩中文字幕在线| 精品国产鲁一鲁一区二区张丽| 日韩av影院在线观看| 欧美国产极速在线| 亚洲人成在线免费观看| 91精品国产九九九久久久亚洲| 欧美成人第一页| 久久九九全国免费精品观看| 精品国产区一区二区三区在线观看| 欧美乱大交xxxxx另类电影| 亚洲美女在线看| 国产中文日韩欧美| 亚洲天堂久久av| 国产91在线播放精品91| 国产在线高清精品| 久久久久国产精品免费网站| 亚洲色图激情小说| 精品动漫一区二区| 欧美精品九九久久| 国产一区二区三区三区在线观看| 欧美成人中文字幕| 91精品视频专区| 美女视频久久黄| 在线播放国产一区中文字幕剧情欧美| 亚洲成人动漫在线播放| 欧美极度另类性三渗透| 日本欧美黄网站| 欧美大尺度电影在线观看| 国产精品日韩在线| 国产精品91免费在线| 久久亚洲电影天堂| 精品久久香蕉国产线看观看亚洲| 亚洲系列中文字幕| 一区二区三区四区在线观看视频| 亚洲专区国产精品| 亚洲精品中文字| 一区二区三区视频观看| 97热在线精品视频在线观看| 成人动漫网站在线观看| 日韩精品免费观看| 久久亚洲综合国产精品99麻豆精品福利| 国产精品无av码在线观看| 国产精品日韩久久久久| 亚洲欧美另类人妖| 日韩免费在线免费观看| 国产suv精品一区二区| 在线视频欧美日韩精品| 亚洲天堂av在线播放| 欧美日韩国产第一页| 538国产精品一区二区在线| 亚洲精品成人久久| 3344国产精品免费看| 久久精品精品电影网| 日韩av在线网址| 一道本无吗dⅴd在线播放一区| 日韩大胆人体377p| 中文字幕国产精品| 欧美成人免费播放| 日韩欧美在线一区| 深夜福利日韩在线看| 亚洲精品一区中文字幕乱码| 日韩精品免费视频| 国产日韩精品综合网站| 日韩美女福利视频| 日本免费久久高清视频| 亚洲综合日韩中文字幕v在线| 国产精品入口日韩视频大尺度| 中文字幕亚洲二区| 欧美亚洲国产成人精品| 亚洲第一福利在线观看| 色香阁99久久精品久久久| 久久久久久久影视| 姬川优奈aav一区二区| 日韩在线激情视频| 日韩经典中文字幕| 色综合久久久888| 久久人人爽人人爽爽久久| 欧美午夜丰满在线18影院| 91在线视频九色| 欧美激情视频一区二区三区不卡| 亚洲国产精品女人久久久| 欧美日韩在线免费| 日韩中文字幕在线看| 九九精品视频在线| 久久九九有精品国产23| 午夜精品久久久久久久99黑人| 国产精品久在线观看| 国产在线视频不卡| 日韩的一区二区| 亚洲精品美女网站| 亚洲第一视频网站| 日韩小视频在线观看| 2019中文字幕在线观看| 欧美成人免费全部观看天天性色| 中文字幕日韩视频| 热久久这里只有精品| 国产日韩在线看片| 91视频国产精品| 精品亚洲一区二区三区在线播放| 亚洲国产成人精品女人久久久| 亚洲国产婷婷香蕉久久久久久| 免费av在线一区| 在线中文字幕日韩| 久久人人爽人人爽人人片亚洲| 亚洲国语精品自产拍在线观看| 欧美午夜www高清视频| 性欧美在线看片a免费观看| 在线国产精品播放| 日本一区二区在线免费播放| 久久99久久亚洲国产| 曰本色欧美视频在线| 欧美野外wwwxxx| 国产91精品久久久久久久| 久久久久久香蕉网| 欧洲中文字幕国产精品| 激情久久av一区av二区av三区| 亚洲午夜av久久乱码| 2019日本中文字幕| 国产亚洲精品久久久优势| 久久精品91久久香蕉加勒比| 日韩av在线最新|