前言
Kotlin插件于1.4.20中提出废弃,谷歌留给了我们一年的时间举行修改替换,怎么办呢?已经习惯了以前直接使用xml中的id作为view使用了,岂非要回到findViewById的时代?怎么大概,还不赶紧拥抱ViewBinding的度量。
谷歌也深知Kotlin插件的毛病,好比:
- 通过 Kotlin 合成方法(Synthetic 视图)取代 findViewById,这是通过全局空间缓存 ID,与 Layout
无关,没有针对 ID 举行无效查抄
- 在差异的 Layout 文件中,使用了相同的 ID,大概删除了 ID ,它并不会提示空异常,导致增加了 App 的瓦解次数
- 仅仅支持 Kotlin
- 默认是通过 HashMap 缓存 ID 浪费空间,虽然可以通过在模块级 build.gradle 文件内添加
defaultCacheImplementation = “SPARSE_ARRAY” 来修改默认的实现方式为 SparseArray
…
ViewBinding办理了上述问题,但是同时带来其他毛病:
- ViewBinding 相比于 kotlinx.android.synthetic 使用方式比力复杂
- 在 Activity 、 Fragment 、Dialog 、 Adapter 中 ViewBinding 和 DataBinding
初始化方式有些差异 需要单独处置处罚 include 带 merge 标签的结构,和不带 merge 标签的结构等等
- DataBinding 联合 LiveData 一起使用需要做单独的处置处罚
…
不外对于视图绑定,也有方便的写法,快一起来见地一下吧。
使用
首先在Gradle插件中声明使用
- // Android Studio 3.6android { viewBinding { enabled = true } dataBinding{ enabled = true }}// Android Studio 4.0android { buildFeatures { dataBinding = true viewBinding = true }}
复制代码 其次,为了便捷的一行代码直接使用ViewBinding,我们还需要引入
- implementation 'com.hi-dhl:binding:1.0.5'
复制代码 然后直接在Activity、Fragment、Adapter等需要使用的地方使用
- class HomeFragment : Fragment() { //一行代码,FragmentHomeBinding 是对应的Fragment或Activity自动对应的Binding,和自己界说的名字有关 private val binding: FragmentHomeBinding by viewbind() private var count = 0 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_home, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) //click为xml中的id binding.click.setOnClickListener { count++ //dashboardView为xml中的id binding.dashboardView.setPointer(count % 21) } }}
复制代码 结构文件xml
之后只需要像kotlin插件那样用binding调用对应的id就好啦,是不是一行代码直接使用viewbinding了?是不是很方便?赶紧在kotlin插件停用之前替换掉吧。
来源:https://blog.csdn.net/qq_39168470/article/details/112007146
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |