当前位置:   article > 正文

Warning: The ‘kotlin-android-extensions‘ Gradle plugin is deprecated. Please use this migration【已解决】_the 'kotlin-android-extensions' gradle plugin is d

the 'kotlin-android-extensions' gradle plugin is deprecated. please use this

Warning: The 'kotlin-android-extensions' Gradle plugin is deprecated. Please use this migration guide (https://goo.gle/kotlin-android-extensions-deprecation) to start working with View Binding (https://developer.android.com/topic/libraries/view-binding) and the 'kotlin-parcelize' plugin.

kotlin  kotlin-android-extensions弃用

参照官方文档

视图绑定功能可按模块启用。要在某个模块中启用视图绑定,请将 viewBinding 元素添加到其 build.gradle 文件中,如下例所示:

  1. android {
  2. ...
  3. viewBinding {
  4. enabled = true
  5. }
  6. }

如果您希望在生成绑定类时忽略某个布局文件,请将 tools:viewBindingIgnore="true" 属性添加到相应布局文件的根视图中:

  1. <LinearLayout
  2. ...
  3. tools:viewBindingIgnore="true" >
  4. ...
  5. </LinearLayout>

用法

为某个模块启用视图绑定功能后,系统会为该模块中包含的每个 XML 布局文件生成一个绑定类。每个绑定类均包含对根视图以及具有 ID 的所有视图的引用。系统会通过以下方式生成绑定类的名称:将 XML 文件的名称转换为驼峰式大小写,并在末尾添加“Binding”一词。

例如,假设某个布局文件的名称为 result_profile.xml

  1. <LinearLayout ... >
  2. <TextView android:id="@+id/name" />
  3. <ImageView android:cropToPadding="true" />
  4. <Button android:id="@+id/button"
  5. android:background="@drawable/rounded_button" />
  6. </LinearLayout>

 

  1. 所生成的绑定类的名称就为 ResultProfileBinding。此类具有两个字段:一个是名为 name 的 TextView,另一个是名为 buttonButton。该布局中的 ImageView 没有 ID,因此绑定类中不存在对它的引用。
  2. 每个绑定类还包含一个 getRoot() 方法,用于为相应布局文件的根视图提供直接引用。在此示例中,ResultProfileBinding 类中的 getRoot() 方法会返回 LinearLayout 根视图。
  3. 以下几个部分介绍了生成的绑定类在 Activity 和 Fragment 中的使用。
  4. 在 Activity 中使用视图绑定
  5. 如需设置绑定类的实例以供 Activity 使用,请在 Activity 的 onCreate() 方法中执行以下步骤:
  6. 调用生成的绑定类中包含的静态 inflate() 方法。此操作会创建该绑定类的实例以供 Activity 使用。
  7. 通过调用 getRoot() 方法或使用 Kotlin 属性语法获取对根视图的引用。
  8. 将根视图传递到 setContentView(),使其成为屏幕上的活动视图。

 kt

  1. private lateinit var binding: ResultProfileBinding
  2. override fun onCreate(savedInstanceState: Bundle) {
  3. super.onCreate(savedInstanceState)
  4. binding = ResultProfileBinding.inflate(layoutInflater)
  5. val view = binding.root
  6. setContentView(view)
  7. }

 java

  1. private ResultProfileBinding binding;
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. binding = ResultProfileBinding.inflate(getLayoutInflater());
  6. View view = binding.getRoot();
  7. setContentView(view);
  8. }

 使用

kt

  1. binding.name.text = viewModel.name
  2. binding.button.setOnClickListener { viewModel.userClicked() }

 

java

  1. binding.getName().setText(viewModel.getName());
  2. binding.button.setOnClickListener(new View.OnClickListener() {
  3. viewModel.userClicked()
  4. });

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/319993
推荐阅读
相关标签
  

闽ICP备14008679号