Kotlin 接口回调示例
- 作者: 王杉65883988
- 来源: 51数据库
- 2021-07-29
1. 只有一个方法时:
//接口定义:
private var onDeleteListener: ((String) -> Unit)? = null
fun setOnDeleteListener(onDeleteListener: ((String) -> Unit)) {
this.onDeleteListener = onDeleteListener
}
// 使用
onDeleteListener?.invoke("delete")
//外部使用:
deleteDialog.setOnDeleteListener {
Log.e("1111", "setOnDeleteListener:$it")
}
2. 多于一个方法时:
==================================================
//仿java写法
interface DialogListener {
fun dismiss()
fun confirm()
}
private var dialogListener : DialogListener ? = null
fun setDialogListener(dialogListener: DialogListener){
this.dialogListener = dialogListener
}
//使用
dialogListener ?.confirm()
dialogListener ?.dismiss()
//外部调用
dialog.setDialogListener(object : UnplacedDialog.DialogListener {
override fun dismiss() {
}
override fun confirm() {
}
})
==================================================
//Kotlin写法(DSL)
inner class ListenerBuilder {
internal var dismissAction: (() -> Unit)? = null
internal var confirmAction: (() -> Unit)? = null
fun dismiss(action: () -> Unit) {
dismissAction = action
}
fun confirm(action: () -> Unit) {
confirmAction = action
}
}
private var mListener: ListenerBuilder? = null
fun addUDialogListener(listenerBuilder: ListenerBuilder.() -> Unit) {
mListener = ListenerBuilder().also(listenerBuilder)
}
//使用
mListener?.confirmAction?.invoke()
mListener?.dismissAction?.invoke()
//外部调用
dialog.addDialogListener {
dismiss {
}
confirm {
}
}
推荐阅读
热点文章
android中Bitmap用法(显示,保存,缩放,旋转)实例分析
12
android 仿微信聊天气泡效果实现思路
1
Android的尺度,drawable-xxxxxxx
2
Codeforces Round #656 (Div. 3) (C、D题)
1
Android之handler异步消息处理机制解析
6
GridView中图片显示出现上下间距过大,左右图片显示类似瀑布流的问题
0
AsyncTask的简单使用
5
两个简单Fragment之间的通信(三种方式)
18
uboot修改设置boot参数命令
41
android中实现从相册中一次性获取多张图片与拍照,并将选中的图片显示出来
2