由於老闆想讓不會程式的同事們在開會時溝通順利一點

所以就寫了這篇較詳細易懂的文

希望行銷、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

Butterknife 點擊進入 Github 

這是一個很受歡迎的 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

文章標籤
全站熱搜
創作者介紹
創作者 顏澤偉 的頭像
顏澤偉

Willy's Fish教學筆記』

顏澤偉 發表在 痞客邦 留言(0) 人氣(127)