用于函数传参
//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<OnlineTime, Int>
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}
}
}
1.创建接口,创建对应抽象方法
2.声明接口成员变量
3.创建一个公共的监听方法
interface OnDialogListener {
fun onConfirm(view: View)
fun onCancel()
}
var mListener: OnDialogListener? = null
fun setOnDialogListener(dialogListener: OnDialogListener?) {
mListener = dialogListener
}
4.在对应的地方调用接口方法
rootView.findViewById<LinearLayout>(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() {
}
})
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<LinearLayout>(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 ={
})