前言
在体验kotlin后,你一定会kotlin实现一些简单的接口回调方法的lambda印象深刻。例如下面的代码:
val button = Button(this) button.setOnClickListener { //在此处实现点击逻辑 }
这大大的减少了重复的模板代码。提高了代码的阅读效率。所以,此篇博客讲解我们如何实现这种lambda接口回调。
回调lambda
代码
class MainActivity : AppCompatActivity() { private lateinit var listener: (String) -> Unit override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) setOnListener { textView.text = it } Handler().postDelayed(Runnable { listener.invoke("触发成功") }, 1000) } fun setOnListener(str: (String) -> Unit){ listener = str } }
1.首先在创建一个延后初始化的全局变量 private lateinit var listener: (String) -> Unit
2.然后实现setOnListener方法
3.最后的重点是使用invoke发布数据,我这里使用了一个Handler模拟延迟的数据回调
其他
class FunTest { /** * funTest.example { s, i -> println("$s $i") } */ fun example(out: (String, Int) -> Unit) { out("11", 1) } /** * 非内联函数 * funTest.example2 {if (it.isEmpty()) return@example2 } */ fun example2(str: (String) -> Unit) { str.invoke("demo") } /** * 内联函数 * funTest.example2_1 {if (it.isEmpty()) return} */ inline fun example2_1(str: (String) -> Unit) { str.invoke("demo") } /** * funTest.example3( str1 = { println(it) }, str2 = { println(it)}) */ inline fun example3(str1: (String) -> Unit, str2: (String) -> Unit) { str1("str1") str2("str2") } }
End