由於老闆想讓不會程式的同事們在開會時溝通順利一點
所以就寫了這篇較詳細易懂的文
希望行銷、PM 們可以理解 XDD
最近 Google 已宣佈棄用 Kotlin Android Extensions
需要改用 Jetpack view binding
為什麼呢?
是因為 Kotlin Android Extensions 在運行上
對於 view 的管理並不是很好,導致會有偶發性的 nullPointException
而 view binding 則可以配合 Activity 、Fragment 的 lifecycle 來進行管理
降低了 nullPointException 的發生率
演進過程!!!
在看 code 之前,我們先介紹一下 Android 對於 view 的演進過程
從一開始的 findViewById
val tv = findViewById<TextView>(R.id.mainAccIssueContent) tv.text = "test" tv.setTextColor(Color.RED)
因為太繁鎖了,每個 view 都要寫一次去找
所以後來 Jake Wharton 大神寫了一個 Library
這是一個很受歡迎的 library
直至後來 Kotlin 的興起
Kotlin Android Extensions 的出現才漸漸的沒人在使用
最後作者也宣佈不再維護
建議大家用 Google 推薦的方式
Kotlin Android Extensions 為什麼會被這麼多人愛戴呢?
就是他方便、簡潔的使用方式
他用起來像這樣
itemChatListName.text = member.simpleInfo.name
直接 id 拿起來用,是不是很方便呢?
但現在也因為一些缺點,而需要改用 Google 自己的 Jetpack view binding
進入重點!!!
view binding 的使用,在 Module build.gradle 加入
buildFeatures {
viewBinding true
}
就可以開啟了
若是遷移的朋友們,要記得移除
apply plugin: `kotlin-android-extensions`
然後就要開始變更 code 了
一進來會看到紅通通的錯誤
不用怕,這是移除 Kotlin Android Extensions 的關係
一步步慢慢修正就可以了
剛剛有提到 view binding 能做 lifecycle 的連動
我們首先增加一個 parameter
private var binding: FragmentCardBinding? = null
然後
override fun onDestroyView() {
binding = null
super.onDestroyView()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding = FragmentCardBinding.bind(view)
}
在 onViewCreated 的時候,用 View 來 Binding
在 onDestroyView 的時候,釋放掉
所以在使用的時候我們就會先判斷
是不是 null , 如下
binding?.itemChatListName?.text = member.simpleInfo.name
至此,view binding 就算完成了
下篇會講我遇到的問題:
如何在 RecyclerView 裡面使用 view binding,點我進入
資料來源:
https://developer.android.com/topic/libraries/view-binding/migration
https://github.com/JakeWharton/butterknife
https://developer.android.com/topic/libraries/view-binding
留言列表