首页
学习
活动
专区
工具
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)适配器的进阶表达

前面在介绍列表视图和网格视图时,它们的适配器代码都存在视图持有者ViewHolder,因为Android对列表类视图提供了回收机制,如果某些列表项在屏幕上看不到了,则系统会自动回收相应的视图对象。随着用户的下拉或者上拉手势,已经被回收的列表项要重新加载到界面上,倘若每次加载都得从头创建视图对象,势必增加了系统的资源开销。所以ViewHolder便应运而生,它在列表项首次初始化时,就将其视图对象保存起来,后面再次加载该视图时,即可直接从持有者处获得先前的视图对象,从而减少了系统开销,提高了系统的运行效率。 视图持有者的设计理念固然美好,却苦了Android开发者,每次由BaseAdapter派生新的适配器类,都必须手工处理视图持有者的相关逻辑,实在是个沉重的负担。有鉴于此,循环视图的适配器把视图持有者的重用逻辑剥离出来,由系统自行判断并处理持有者的重用操作。开发者继承RecyclerView.Adapter之后,只要完成业务上的代码逻辑即可,无需进行BaseAdapter视图持有者的手工重用。 现在由Kotlin实现循环视图的适配器类,综合前面两小节提到的优化技术,加上视图持有者的自动重用,适配器代码又得到了进一步的精简。由于循环视图适配器并不提供列表项的点击事件,因此开发者要自己编写包括点击、长按在内的事件处理代码。为方便理解循环适配器的Kotlin编码,下面以微信的公众号消息列表为例,给出对应的消息列表Kotlin代码:

04
  • Android开发笔记(一百七十二)第二代翻页视图ViewPager2

    正如RecyclerView横空出世取代ListView和GridView那样,Android也推出了二代翻页视图ViewPager2,打算替换原来的翻页视图ViewPager。与ViewPager相比,ViewPager2支持更丰富的界面特效,包括但不限于下列几点: 1、不但支持水平方向翻页,还支持垂直方向翻页; 2、支持RecyclerView.Adapter,允许调用适配器对象的notifyItem***方法,从而动态刷新某项视图; 3、除了当前页,也支持展示左右两页的部分区域; 4、支持在翻页过程中展示自定义的切换动画; 虽然ViewPager2增加了这么棒的功能,但它用起来非常简单,掌握下面几个方法就够了: setAdapter:设置二代翻页视图的页面适配器。 setOrientation:设置二代翻页视图的翻页方向。其中ViewPager2.ORIENTATION_HORIZONTAL表示水平方向,ViewPager2.ORIENTATION_VERTICAL表示垂直方向。 setPageTransformer:设置二代翻页视图的页面转换器,以便展示切换动画。 接下来利用循环适配器搭配二代翻页视图,演示看看ViewPager2的界面效果。注意RecyclerView与ViewPager2拥有各自的AndroidX库,故需修改模块的build.gradle,在dependencies节点内部补充以下两行依赖配置:

    03
    领券