1,传参

用于函数传参

//1、调用

private fun kkk() {

//调用传参

CoinFragment.setOnlineCoinGetter(this) {

when(it.value){

5 -> 500

10 -> 600

15 -> 700

20 -> 800

25 -> 900

30 -> 1000

else -> 1000

}

}

}

//2、被调用者

object CoinFragment {

//4、接受值

var onlineRewardCoin: ((OnlineTime)->Int)? = null //自定义在线时常金币奖励数

//5、集合的hashMap

var onLineTimeRewardCoinParmas: MutableMap

get() {

return mutableMapOf(

OnlineTime.FIVE to (onlineRewardCoin?.invoke(OnlineTime.FIVE)?:600),

OnlineTime.TEN to (onlineRewardCoin?.invoke(OnlineTime.TEN)?:800),

OnlineTime.FIFTEEN to (onlineRewardCoin?.invoke(OnlineTime.FIFTEEN)?:1000),

OnlineTime.TWENTY to (onlineRewardCoin?.invoke(OnlineTime.TWENTY)?:1200),

OnlineTime.TWENTY_FIVE to (onlineRewardCoin?.invoke(OnlineTime.TWENTY_FIVE)?:1400),

OnlineTime.THIRTY to (onlineRewardCoin?.invoke(OnlineTime.THIRTY)?:2000)

)

}

set(value) {}

//2、被调用

fun setOnlineCoinGetter(context: Context, getter: ((OnlineTime)->Int)?) {

//3、赋值给函数

onlineRewardCoin = getter

//6、打印集合的hashMap

Log.d("LUO","======${onLineTimeRewardCoinParmas}")

//{FIVE=500, TEN=600, FIFTEEN=700, TWENTY=800, TWENTY_FIVE=900, THIRTY=1000}

}

}

2,接口回调

Java思路实现

1.创建接口,创建对应抽象方法 2.声明接口成员变量 3.创建一个公共的监听方法

interface OnDialogListener {

fun onConfirm(view: View)

fun onCancel()

}

var mListener: OnDialogListener? = null

fun setOnDialogListener(dialogListener: OnDialogListener?) {

mListener = dialogListener

}

4.在对应的地方调用接口方法

rootView.findViewById(R.id.ll_idcard).setOnClickListener {

mListener?.onConfirm(it)

}

5.使用

val loginDialog = LoginDialog.newInstance()

loginDialog.setOnDialogListener(object : BaseDialogFragment.OnDialogListener {

override fun onConfirm(view: View) {

}

override fun onCancel() {

}

})

Koltin高阶函数实现

1.声明成员变量,类型为函数类型 2.创建一个公共的监听方法

protected var onConfirmListner: ((view: View) -> Unit)? = null

protected var onCancelListener: (() -> Unit)? = null

fun setOnDialogListener(

onConfirmListner: ((view: View) -> Unit),

onCancelListener: (() -> Unit)? = null

) {

this.onConfirmListner = onConfirmListner

this.onCancelListener = onCancelListener

}

() -> Unit作为一个函数声明,无参,Unit表示无返回值 (() -> Unit)?=null 表示此声明的变量可为null 如果想声明带参数,有返回体的函数可以这么声明 (age:Int,name:String) -> String,注意形参可省略,那可以直接写成(Int,String) -> String

3.在对应的地方调用

rootView.findViewById(R.id.ll_idcard).setOnClickListener {

onConfirmListner?.invoke(it)

}

直接用声明的函数变量调用invoke()方法,这里的还可以写成onConfirmListner!!(it),因为onConfirmListner本身就是一个函数,但这样假如onConfirmListner为null就会异常,所以最好直接onConfirmListner?.invoke(),如果为null就不会执行invoke方法。另外有参数,直接在invoke()方法传入参数

4.使用

val loginTipDialog = LoginTipDialog()

loginTipDialog.setOnDialogListener(onConfirmListner = {

}, onCancelListener ={

})

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: