萌萌の初音
萌萌の初音
发布于 2021-01-27 / 1199 阅读
0

kotlin-android-extensions代替方案ViewBinding

在kotlin Kotlin 1.4.20-M2更新信息中Kotlin Android Extensions(之后简称KAE)被弃用(详情KT-42121),新版本的Android Studio将不再引用KAE插件,如何把项目中的KAE插件移除并且不使用一长串findviewById呢?ViewBinding就是首选的替代品(官方推荐)。

如何使用?

在build.gradle文件中引入ViewBinding。

android {
...
    buildFeatures {
        viewBinding true
    }
...
}

以上就可以开始使用ViewBinding了。

在Activity中的使用

在onCreate()方法中进行如下修改:

    lateinit var layout : ActivityMainBinding
    override fun onCreate() {
         layout = ActivityMainBinding.inflate(layoutInflater)
         setContentView(layout.root)
    }

没接触过DataBinding和ViewBinding的小伙伴就开始疑惑了ActivityMainBinding从哪里来的?是通过activity_main.xml文件自动生成的。
这样设置后又如何使用呢?看一下自动生成的源码

public final class ActivityMainBinding implements ViewBinding {
  @NonNull
  private final RelativeLayout rootView;

  @NonNull
  public final MaterialTextView text;

  //...以下省略
}

可以看出会根据你的布局文件view设置的id进行驼峰命名,直接在代码中使用layout.text就好了。以上就是Activity的使用。

在Fragment中使用

跟Activity是一样的,在onCreateView重写方法中引入就好了。

    lateinit var layout : FragmentMainBinding
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        layout = FragmentMainBinding.inflate(inflater,container,false)
        return layout.root
    }

Fragment还需要在onDestroyView()中对ViewBinding进行内存释放。以上就是ViewBinding替换KAE的全部内容了。