1. Passing parameters
Used for function parameter passing
//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}
}
}
2. Interface callback
Java idea implementation
1. Create an interface and create corresponding abstract methods
2. Declare interface member variables
3. Create a public listening method
interface OnDialogListener {
fun onConfirm(view: View)
fun onCancel()
}
var mListener: OnDialogListener? = null
fun setOnDialogListener(dialogListener: OnDialogListener?) {
mListener = dialogListener
}
4. Call the interface method in the corresponding place
rootView.findViewById<LinearLayout>(R.id.ll_idcard).setOnClickListener {
mListener?.onConfirm(it)
}
5.Use
val loginDialog = LoginDialog.newInstance()
loginDialog.setOnDialogListener(object : BaseDialogFragment.OnDialogListener {
override fun onConfirm(view: View) {
}
override fun onCancel() {
}
})
Koltin high-order function implementation
1. Declare member variables whose type is function type
2. Create a public listening method
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 is declared as a function with no parameters. Unit means no return value
(() -> Unit)?=null means that the declared variable can be null.
If you want to declare a function with parameters and a return body, you can declare it like this
(age:Int,name:String) -> String, note that the formal parameters can be omitted, then it can be written directly as (Int, String) -> String
3. Call in the corresponding place
rootView.findViewById<LinearLayout>(R.id.ll_idcard).setOnClickListener {
onConfirmListner?.invoke(it)
}
Directly call the invoke() method with the declared function variable. It can also be written as onConfirmListner!!(it), because onConfirmListner itself is a function, but if onConfirmListner is null, an exception will occur, so it is best to directly onConfirmListner?.invoke( ), if it is null, the invoke method will not be executed. In addition, there are parameters, which can be passed in directly in the invoke() method.
4.Use
val loginTipDialog = LoginTipDialog()
loginTipDialog.setOnDialogListener(onConfirmListner = {
}, onCancelListener ={
})