前言
在體驗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