首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让视图绑定像使用Kotlin Synthetics一样在RecyclerView.ViewHolder中使用XML布局高度?

在Kotlin中,Synthetics库允许开发者通过ID直接访问视图,这种方式在Android开发中非常方便。然而,随着Kotlin Android Extensions插件的弃用,我们需要寻找其他方式来实现类似的功能。在RecyclerView的ViewHolder中使用XML布局高度,可以通过以下步骤实现:

基础概念

  1. View Binding:View Binding 是一种更安全、更简洁的方式来访问布局中的视图。它自动生成绑定类,这些类包含了对布局中所有视图的直接引用。
  2. RecyclerView.ViewHolder:ViewHolder 是 RecyclerView 的一个内部类,用于缓存视图,以提高列表滚动时的性能。

优势

  • 类型安全:View Binding 提供了类型安全的视图访问方式,减少了类型转换错误。
  • 编译时检查:由于绑定类是在编译时生成的,因此可以在编译时捕获到潜在的错误。
  • 简洁的代码:使用 View Binding 可以减少样板代码,使代码更加简洁易读。

类型

  • 单个布局绑定:每个布局文件生成一个绑定类。
  • 包含多个视图的布局:如果一个布局文件包含多个视图,生成的绑定类将包含对这些视图的引用。

应用场景

  • RecyclerView:在 RecyclerView 的 Adapter 中使用 View Binding 来绑定视图。
  • Activity 和 Fragment:在 Activity 或 Fragment 中使用 View Binding 来访问布局中的视图。

实现步骤

  1. 启用 View Binding:在 build.gradle 文件中启用 View Binding。
代码语言:txt
复制
android {
    ...
    viewBinding {
        enabled = true
    }
}
  1. 创建布局文件:创建一个 XML 布局文件,例如 item_layout.xml
代码语言:txt
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
</LinearLayout>
  1. 生成绑定类:构建项目后,会自动生成一个绑定类 ItemLayoutBinding
  2. 在 ViewHolder 中使用绑定类:在 RecyclerView 的 ViewHolder 中使用生成的绑定类。
代码语言:txt
复制
class MyViewHolder(private val binding: ItemLayoutBinding) : RecyclerView.ViewHolder(binding.root) {
    fun bind(item: Any) {
        // 使用 binding 访问视图
        binding.textView.text = item.toString()
    }
}
  1. 在 Adapter 中使用 ViewHolder:在 RecyclerView 的 Adapter 中创建并使用 ViewHolder。
代码语言:txt
复制
class MyAdapter(private val items: List<Any>) : RecyclerView.Adapter<MyAdapter.MyViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        // 使用 View Binding 创建 ViewHolder
        val binding = ItemLayoutBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return MyViewHolder(binding)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        // 绑定数据到 ViewHolder
        holder.bind(items[position])
    }

    override fun getItemCount(): Int {
        return items.size
    }
}

参考链接

通过以上步骤,你可以在 RecyclerView 的 ViewHolder 中使用 View Binding 来访问 XML 布局中的视图,从而实现类似 Kotlin Synthetics 的便捷访问方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Kotlin入门(23)适配器的进阶表达

为方便理解循环适配器的Kotlin编码,下面以微信的公众号消息列表为例,给出对应的消息列表Kotlin代码: //ViewHolder构造时初始化布局的控件对象 class RecyclerLinearAdapter...    //绑定视图持有者的各个控件对象,需要子类重写     override abstract fun onBindViewHolder(holder: RecyclerView.ViewHolder...不过Kotlin早就料到了这一手,为此专门提供了一个插件名叫LayoutContainer,只要开发者自定义的ViewHolder继承该接口,即可在视图持有者内部无需获取就能使用控件对象了。...这下不管是Activity代码,还是适配器代码,均可将控件名称拿来直接调用了。...这么神奇的魔法,快来看看Kotlin的适配器代码是如何书写的: //利用Kotlin的插件LayoutContainer,适配器中直接使用控件对象,而无需对其进行显式声明 class RecyclerStaggeredAdapter

1.8K41
  • Kotlin Android Extensions 的未来计划

    进行 Android 开发带来了两项新的便利功能: Synthetic 视图 : 您可以将调用 findViewById 替换为使用 kotlinx.android.synthetic 进行 UI 交互...我们随后发布了 适用于 Android 的视图绑定 组件,它是一个与 Android 构建工具链深度集成并提供与 Kotlin synthetic 类似功能的官方支持库。...接下来的一年里,我们的团队将共同弃用 synthetics,并继续支持我们建议的选项——"视图绑定 (View Binding)"。...但是,注解包将更改为 kotlinx.parcelize,并且模块级 Gradle 文件,您需要开始使用独立的 kotlin-parcelize 插件而非 android-kotlin-extensions...如果您使用 Android Kotlin synthetics,建议尽快迁移到 "视图绑定 (View Binding)"。请参阅我们的 迁移指南 以了解更多详细信息。

    84830

    Android使用ViewBinding

    前言 原始方式 我们的开发过程,需要获取XML布局文件的ViewId,以便其赋值显示,我们习惯使用findViewById进行操作,可这样会导致很多的模版代码出现。...基于Kotlin的扩展 近几年Android对Kotlin的支持,我们开始使用 Android Kotlin extensions。 文件中导入布局文件直接引用viewId。...ViewBinding 使用了编译时生成的绑定类, xml 布局文件的每个视图都会生成一个对应的绑定类对象,因此在编译时检测到视图名称的错误。...多个模块引用同一个视图时可能会出现命名冲突的问题,需要通过手动指定全限定名解决。...Kotlin扩展 使用起来相对简单,可以直接在布局文件中使用 Kotlin 扩展函数来查找和操作视图

    60021

    RecyclerView实现混合布局

    这些布局,可以用listview来实现,也可以RecyclerView来实现,每个布局文件都是不一样的,第一张图:上面是一行三个图,下面是一行四个图。第二张图一行分左右。...表示当前是第几个Item,然后我们可以通过position拿到当前的Item对象,然后判断这个item对象需要那种视图,返回一个int类型的视图标志,然后onCreatViewHolder方法给引入布局...  c:onBindViewHolder绑定数据 5:主文件设置recyclerview的布局样式,赋值调试  1:Item  xml布局文件和Bean类,ViewHolder创建。...,这样就有点麻烦了 不挑出来直接就只判断type,然后根据type去调用不同的layout,然后绑定数据的方法再次判断是不是自己想要的ViewHolder,最后赋值显示。...,该方法写。

    2.2K20

    【Jetpack】DataBinding 架构组件 ⑥ ( RecyclerView 数据绑定 )

    一、RecyclerView 数据绑定核心要点 1、启用数据绑定 / 导入依赖 RecyclerView , 如果要使用 DataBinding 架构组件进行数据绑定 , 首先要 启用 DataBinding...类 , 在其中维护 item.xml 布局文件 对应的 ItemBinding 数据绑定类实例对象 , 构造函数设置改 ItemBinding 对象 ; class MyViewHolder...( 可不使用 DataBinding ) Activity 组件的布局 可以使用 数据绑定 , 也可以不使用 , 该布局没有绑定数据 ; 使用了 DataBinding 布局 : 布局使用 DataBinding...是 RecyclerView 条目的布局 , 需要 自定义 RecyclerView.Adapter , 为每个条目布局绑定一个 Student 数据类 ; DataBinding 布局...ItemBinding , class MyViewHolder: RecyclerView.ViewHolder维护 , 可以通过该类获取数据绑定布局 , 并为其设置数据 ; RecyclerView.Adapter

    68820

    AndroidApp和车机开发:RecyclerView实现触摸和拖放的功能

    引言 现代应用程序,用户交互性是提供丰富用户体验的关键因素。RecyclerView作为Android处理列表和网格布局的强大组件,支持多种交互,包括拖放排序。...本文指导您如何在RecyclerView实现拖放功能,使用户能够通过长按和拖动来重新排序列表项,用Kotlin实现 长按和拖放操作 为了为RecyclerView添加长按拖放功能,我们将通过自定义ItemTouchHelper.Callback...实现步骤 第一步:编写XML布局文件 首先,为列表项编写XML布局文件,如 item_type_one.xml: //item_type_one.xml,依此类推... <?...使用Collections.swap交换元素列表的位置。 调用notifyItemMoved通知RecyclerView元素已移动。...考拖动操作期间提供视觉反馈,以增强交互性。 结语 通过上述步骤,可以轻松地Android应用的RecyclerView实现拖放排序功能。

    20320

    使用视图绑定替代 findViewById

    Activity 中使用视图绑定 假如您有一个布局文件名叫 activity_awesome.xml,其中包含了一个按钮和两个文本视图。... Activity 的 onCreate 方法,要将 root 传入 setContentView 方法,从而 Activity 可以使用绑定对象布局。...使用绑定对象编写安全性更佳的代码 findViewById 是许多用户可见 bug 的来源: 我们很容易传入一个布局根本不存在的 id,从而导致空指针异常而崩溃;由于此方法类型不安全,也很容易使人写出...结合数据绑定使用视图绑定 视图绑定只是 findViewById 的取代方案,如果您希望 XML 自动绑定视图,可以使用数据绑定库。数据绑定视图绑定可以生成同样的组件,它们可以同时工作。...两者都被开启时,使用 标签的布局会由数据绑定来生成绑定对象;而其余的布局则由视图绑定生成绑定对象。 您可以同一 Module 同时使用数据绑定视图绑定

    1.6K30

    Android Studio 3.6使用视图绑定替代 findViewById的方法

    Activity 中使用视图绑定 假如您有一个布局文件名叫 activity_awesome.xml,其中包含了一个按钮和两个文本视图。... Activity 的 onCreate 方法,要将 root 传入 setContentView 方法,从而 Activity 可以使用绑定对象布局。...使用绑定对象编写安全性更佳的代码 findViewById 是许多用户可见 bug 的来源: 我们很容易传入一个布局根本不存在的 id,从而导致空指针异常而崩溃;由于此方法类型不安全,也很容易使人写出...结合数据绑定使用视图绑定 视图绑定只是 findViewById 的取代方案,如果您希望 XML 自动绑定视图,可以使用数据绑定库。数据绑定视图绑定可以生成同样的组件,它们可以同时工作。...两者都被开启时,使用 <layout 标签的布局会由数据绑定来生成绑定对象;而其余的布局则由视图绑定生成绑定对象。 您可以同一 Module 同时使用数据绑定视图绑定

    2.4K31

    为什么说Flutter移动开发变得更好?

    让我们从Android构建此列表所需的步骤开始: 用XML创建list-item布局文件 创建一个适配器来绑定视图并设置数据 为列表创建布局(可能在Activity或Fragment) 填充Fragment...构建一个这样的自定义视图有多困难。...不过,Flutter,这分分钟解决。能够将用户界面的一部分抽取到Widget这样的自包含单元,可以轻松地应用程序甚至跨不同应用程序重复使用这些小部件。...使用Flutter可以一次性完成上面的步骤并把值绑定到UI上。 现在无需处理Android的数据绑定,比如设置监听器或处理生成的绑定代码。 Android上构建这些基本的东西非常繁琐。...Flutter使用Databinding相同的思想,即将视图/小部件绑定到变量,而无需Java / Kotlin手动管理数据绑定,不用专门的绑定文件来桥接XML和Java。

    2K10

    viewBinding的使用(记一次重构项目的过程)

    Adapter 的用法 4.使用include包含布局的嵌套布局 四、总结 一、前言 最近放寒假了,终于有空做项目了,想着把之前的一些项目重构一下,碰巧重构到 view Binding 这块,之前都是用...kotlin 的那个扩展,其实刚开始做项目的时候这个就已经废弃了,由于当时自己有点懒,没去学习这个新的代替方案,所以就成为一个历史遗留的问题,参考官方文档 view Binding 官方文档,这里只是针对目前使用的几个场景进行重构...Fragment 的用法 这个和Activity差不多,就是初始化不一样,这边采用一种比较安全的策略使得bindingfragment内部不能被修改,binding的get方法为_binding的,...Adapter 的用法 这个稍微麻烦一点,不过原理还是一样的,下面这个例子即可说明,针对那些使用findViewById进行了一些优化,这里涉及item的复用,注意变量的作用域范围,考虑binding...kotlin扩展虽然方便但是还是比较容易出错,尤其是不同布局采用相同的id名时经常弄错,用了view binding之后就不需要担心这个了,与视图绑定,安全性大大提高,同时也简化了传统的获取id的方法

    83010

    Android:Jetpack之视图绑定——ViewBinding

    Data Binding→数据绑定,可使用声明式将布局的界面组件绑定到应用的数据源; Lifecycles→生命周期感知,可感知和响应Activity和Fragment的生命周期状态的变化; LiveData...注:使用ViewBinding,AGP版本需 >= 3.6 接着介绍下基本用法,部分内容搬运自官方文档: 《视图绑定》 ① 启用ViewBinding 需要启用视图绑定的Module,在其build.gradle... 编译后,AGP会为Module包含的XML布局文件生成一个绑定类,类名规则: XML文件名转换为Pascal大小写,并加上Binding,比如:result_profile.xml...(layoutInflater) // 2、获得对根视图的引用 val view = binding.root // 3、视图称为屏幕上的活动视图...XML生成一个绑定类,该类的实例会直接引用布局声明了资源id的View ① 自动生成的绑定类 打开:module模块名/build/generated/intermediates/javac/渠道/包名

    1.3K30

    Android:Jetpack之视图绑定——ViewBinding

    Data Binding→数据绑定,可使用声明式将布局的界面组件绑定到应用的数据源; Lifecycles→生命周期感知,可感知和响应Activity和Fragment的生命周期状态的变化; LiveData...注:使用ViewBinding,AGP版本需 >= 3.6 接着介绍下基本用法,部分内容搬运自官方文档: 《视图绑定》 ① 启用ViewBinding 需要启用视图绑定的Module,在其build.gradle... 编译后,AGP会为Module包含的XML布局文件生成一个绑定类,类名规则: XML文件名转换为Pascal大小写,并加上Binding,比如:result_profile.xml...(layoutInflater) // 2、获得对根视图的引用 val view = binding.root // 3、视图称为屏幕上的活动视图...XML生成一个绑定类,该类的实例会直接引用布局声明了资源id的View ① 自动生成的绑定类 打开:module模块名/build/generated/intermediates/javac/渠道/包名

    1.1K30

    实战 | 认识 RecyclerView

    粉红色的方格表示屏幕上正在显示的表项,黄色的方格表示屏幕可视范围之外的表项是如何被回收并转为新的视图 为什么您需要使用 RecyclerView 呢?...下面的代码会使用 Kotlin 语言,但是 RecyclerView 也可以 Java 语言中使用。...对于比较复杂的应用来说,数据可能是来自数据库或者来自于网络,不过这里我们简单使用字符串资源文件作为应用的数据源。 strings.xml 文件,创建一个字符串数组来存放花的名称。 <!... ViewHolder ,创建一个变量来引用 TextView,然后将它指向表项布局里对应的视图。...该方法里进行初始化和填充 RecyclerView 的表项视图。该视图使用前面我们创建的用于显示文本的布局

    1.2K30

    【Android从零单排系列二十五】《Android视图控件——RecyclerView》

    一 RecyclerView基本介绍 RecyclerView是Android支持库的一个强大的视图容器,用于显示和管理大量数据集合的列表或网格。它是目前推荐使用的替代方式之一。...二 RecyclerView使用方法 项目的build.gradle文件添加RecyclerView的依赖: implementation 'androidx.recyclerview:recyclerview...setLayoutManager(LayoutManager layoutManager):设置RecyclerView的布局管理器,决定如何排列和定位子项视图。...四 RecyclerView简单案例 首先,布局文件添加RecyclerView控件(例如,activity_main.xml): <androidx.recyclerview.widget.RecyclerView...复用机制:RecyclerView引入了ViewHolder模式,可以重复利用子项的视图滚动过程减少布局操作,提高性能。

    33710

    Android:手把手带你全面学习常见的RecylerView!

    本文链接:https://blog.csdn.net/carson_ho/article/details/100970555 前言 RecylerViewAndroid开发十分常见 今天,我将为大家带来...答:从名字上看RecyclerView,即回收循环视图,也就是说RecyclerView只管回收与复用View,其他的你可以自己去设置,可以看出其高度的解耦,给予你充分的定制自由 2.2 缺点 RecyclerView...基础概念 4.1 RecyclerView.Adapter 和ListView一样,RecyclerView一样需要适配器,而且这个适配器强制要求了我们必须要用Viewholder,性能得到优化,而且...使用步骤 定义主xml布局 根据需要定义RecyclerView每行所实现的xml布局 定义一个Adapter类继承RecyclerView.Adapter,重写里面的方法。...根据需要定义RecyclerView每行所实现的xml布局(item布局) list_cell.xml <?xml version="1.0" encoding="utf-8"?

    82030

    Now in Android | 11 月刊 · 2019

    您在添加 Kotlin 代码时需要注意一些细节,这些细节会您在将来更容易使用 Java 代码。...深受困扰的开发者们看来,Android 开发不断出现的样板代码中最恼人的就是 findViewById()。每当您要引用层次结构视图时,都必须使用正确的视图 ID,并重复输入类型信息。...,这种做法的本质是,布局文件关联的绑定对象视图创建变量。...不过架构组件的最新进展,我们谈到了 Jake Wharton 正在研究的一种新机制: 视图绑定 (View Binding)。...它的工作方式与数据绑定类似,但是不需要专门的数据资源文件,而只需使用普通的 XML 布局文件即可。 视图绑定从 Android Studio 3.6 Canary 11 可以开始体验。

    62740

    第14章 使用Kotlin 进行 Android 开发(1)第14章 使用Kotlin 进行 Android 开发(1)

    View 布局组件创建和获取视图 View 。...就像上面的示例代码一样,我们只要在代码中直接使用这个布局组件的 id 名称作为变量名即可,剩下的Kotlin 插件会帮我们全部搞定。...当Fragment被detach后,执行attach操作,会Fragment从onCreateView开始执行,一直执行到onResume。attach无法add一样单独使用,单独使用会抛异常。...使用该类创建的对话框可以很好地替换由 Activity 类的方法创建的对话框,因为您可以管理其他 Fragment 一样管理 DialogFragment——它们都被压入由宿主 Activity 管理的...Fragment 绑定 UI 布局必须重写 onCreateView() 方法,为 Fragment 绑定布局,该方法返回的 View 就是 Fragment 的根视图 class ItemDetailFragment

    2.7K30
    领券