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

在使用ViewBinding时,如何在RecyclerView中突出显示单击的项目?

在使用ViewBinding时,要在RecyclerView中突出显示单击的项目,可以通过以下步骤实现:

  1. 首先,在RecyclerView的Adapter中,为每个项目的根布局设置一个点击事件监听器。
代码语言:txt
复制
class MyAdapter(private val items: List<String>) : RecyclerView.Adapter<MyAdapter.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val binding = ItemLayoutBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return ViewHolder(binding)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val item = items[position]
        holder.bind(item)
    }

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

    inner class ViewHolder(private val binding: ItemLayoutBinding) : RecyclerView.ViewHolder(binding.root) {

        fun bind(item: String) {
            binding.textView.text = item

            binding.root.setOnClickListener {
                // 点击事件处理逻辑
                highlightItem(adapterPosition)
            }
        }
    }

    private fun highlightItem(position: Int) {
        // 清除之前突出显示的项目
        clearHighlightedItems()

        // 突出显示当前点击的项目
        val itemView = recyclerView.findViewHolderForAdapterPosition(position)?.itemView
        itemView?.setBackgroundColor(Color.YELLOW)
    }

    private fun clearHighlightedItems() {
        for (i in 0 until recyclerView.childCount) {
            val itemView = recyclerView.getChildAt(i)
            itemView.setBackgroundColor(Color.TRANSPARENT)
        }
    }
}
  1. 在Adapter中,定义一个方法用于突出显示点击的项目。该方法会先清除之前突出显示的项目,然后将当前点击的项目背景色设置为突出显示的颜色。
  2. 在点击事件处理逻辑中,调用highlightItem()方法来突出显示点击的项目。该方法会获取当前点击的项目的位置,然后通过RecyclerView的findViewHolderForAdapterPosition()方法获取对应的ViewHolder,最后设置其背景色为突出显示的颜色。

通过以上步骤,就可以在使用ViewBinding时,在RecyclerView中突出显示单击的项目。

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

相关·内容

【JetPack】视图绑定 ( ViewBinding ) 各种应用 ( 视图绑定两种方式 | Activity 布局 | 对话框布局 | 自定义组件布局 | RecyclerView 列表布局 )

视图绑定 ( ViewBinding ) 界面的两种方式 II . Activity 界面 应用 视图绑定 ( ViewBinding ) III ...., 就是使用这种方式 , 调用该方法后 , 可以直接与界面进行绑定 , 界面显示就是 XxxBinding 对应布局内容 ; II ....Activity 界面 应用 视图绑定 ( ViewBinding ) ---- Activity 界面 应用 视图绑定 ( ViewBinding ) : ① 获取视图绑定类 : 使用 ActivityMainBinding.inflate...Dialog 对话框界面 应用 视图绑定 ( ViewBinding ) ---- Dialog 对话框界面 应用 视图绑定 ( ViewBinding ) : 该界面与 Activity 界面用法基本相同...: public ViewHolder(ItemBinding binding) 传入视图绑定类 , 构造函数中使用视图绑定类初始化 ViewHolder 组件 , 注意别忘了先调用父类方法

1.6K30
  • Google挖坑后人埋-ViewBinding(上)

    相信大部分Kotlin开发者都在使用它进行Android开发,而且之前Android Studio创建Android项目,都会自动帮你依赖: apply plugin: 'kotlin-android-extensions...其实没什么区别,这是为了Kotlin中将不可空类型置空一种妥协方式,同样代码逻辑,Java,就会非常简单了。...中使用,特别是RecyclerView使用,也是一个非常常见使用场景。...利用kotlin-android-extensions,我们可以借助LayoutContainer来ViewHolder中直接使用View id,那么ViewBinding使用方式就更简单了。...目前还未找到现有项目从kotlin-android-extensions迁移到ViewBinding好办法,如果当前项目大量使用kotlin-android-extensions,那么迁移起来,就是一个巨大工程

    2.3K20

    Android各种Exception错误小结

    2.2 ExifInterface 异常 项目使用Glide库进行图片下载时候,每加载一次图片都会出现下面的异常: W/ExifInterface: Invalid image: ExifInterface...我们布局如果是存在该View,但是仍然出现这个错误。 那么只有一种情况。就是viewBinding还没有来得及初始化之前,就调用了viewBinding方法去获取PreviewView对象了。...解决: 上面的代码触发时候,是: cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageAnalysis); 这一行代码触发...最好方法就是需要启动相机相关界面,检测一下设备是否存在摄像头。效果会更好一些。...RecyclerView 使用同一个LinearLayoutManager或者GridLayoutManager时候就会触发上面的运行时错误了。

    1.9K20

    ViewBinding 与 Kotlin 委托双剑合璧

    不会, 未使用类会在混淆被压缩。 ---- 2. ViewBinding 基本用法 这一节我们来介绍 ViewBinding 使用方法,内容不多。...1、创建和回收 ViewBinding 对象需要重复编写样板代码,特别是 Fragment 中使用案例; 2、binding 属性是可空,也是可变使用起来不方便。...如果不使用 post 方式,那么业务方要是 onDestroyView 访问了 binding,则会二次执行 getValue() 这是不必要。...老版本 Java ,传递代码块需要使用匿名内部类实现,而使用 lambda 表达式甚至连函数声明都不需要,可以直接传递代码块作为函数值; 问题 6、Fragment::requireView 是什么...3.3 ViewBinding + Kotlin 委托最终版 V2.0 版本已经完成了针对 Fragment 属性代理,但是实际场景只会在 Fragment 中使用 ViewBinding 吗?

    1.7K20

    【JetPack】为现有 Android 项目配置视图绑定 ( ViewBinding ) 模块 ( 视图绑定不影响传统布局操作 | 视图绑定类关联 Activity | 视图绑定类本质 )

    View 组件 , RecyclerView 列表条目 item 布局 , 这些都要使用到布局文件 ; 3 ....Android 官方文档给出定制方案 : 如果当前有几百个布局文件 , 为了不影响之前代码 , 可以每个布局根视图上配置 tools:viewBindingIgnore=“true” 属性 ;...启用了 ViewBinding 模块后 , 布局如果没有屏蔽视图绑定 , 那么会为该布局生成布局绑定类 , 此时如果进行正常操作 , 仍然不影响 , 可以不用修改之前代码 ; 3 .... build,gradle 配置了视图绑定 : 主要是 viewBinding 配置 , 其它都是多余 ; apply plugin: 'com.android.application' android..., 该布局视图组件与 ActivityMainBinding 没有任何关联 , Activity 显示组件也不是 ActivityMainBinding 绑定类组件 , 因此操作视图绑定类组件不能修改

    76210

    Android RecyclerView使用简述

    RecyclerView使用简述 前言 正文 一、创建项目 二、RecyclerView基本使用 ① item布局和适配器 ② 显示数据 ③ 添加Item点击事件 ④ 添加Item子控件点击事件 ⑤...点击Finish完成项目创建,然后等待项目构建完成,之前AndroidRecyclerView是需要引入依赖库,会有v4,v7版本库,而现在都迁移到androidx下了,目前项目构建时候也会自动添加这个...,不同地方就是视图生成方式,你可以简单对比一下就明白了,ViewBinding使用还是比较简单,下面我们同样需要显示出来。...六、RecyclerView多布局使用   在前面的使用我们操作写适配器代码,都是一个item布局,而有时候数据不同需要显示布局也不同,就存在多布局情况,这种情况应该怎么处理呢?...八、RecyclerView动态更改数据   之前我们显示数据都是直接显示,后面使用过程并没有对数据进行更改,那么下面我们来进行更改试试看。

    2.4K21

    Android:Jetpack之视图绑定——ViewBinding

    使用这些架构开发出应用,从项目质量、代码可读性与可维护性来说,都更加出色,所以这些框架和技术逐渐流行起来。...Data Binding→数据绑定,可使用声明式将布局界面组件绑定到应用数据源; Lifecycles→生命周期感知,可感知和响应Activity和Fragment生命周期状态变化; LiveData...实际开发,也是这部分组件用得多一些,Jetpack库可单独使用,也可以组合使用,开发者可按需选择。...对此,官方还进行了更细致分类,具体可见: 《按类型探索Jetpack库》 关于Jetpack简介就到这里,选型弄清楚组件存在缘由、责任边界,就能有的放矢。...HashMap,id为key,控件实例为value,当用到控件,先查HashMap该id对应实例是否缓存,是返回,否findViewById获取实例存到HashMap,同时把找到实例返回。

    1.4K30

    Android使用ViewBinding

    前言 原始方式 我们开发过程,需要获取XML布局文件ViewId,以便其赋值显示,我们习惯使用findViewById进行操作,可这样会导致很多模版代码出现。...ViewBinding 使用了编译生成绑定类, xml 布局文件每个视图都会生成一个对应绑定类对象,因此在编译检测到视图名称错误。...ViewBinding 可以生成类型安全代码,避免了手动查找和强制转换视图对象麻烦。 ViewBinding 不会增加 APK 大小,因为它只是编译生成代码。...多个模块引用同一个视图可能会出现命名冲突问题,需要通过手动指定全限定名解决。...总体而言 ViewBinding 类型安全性和编译错误检测方面比 Kotlin扩展 更好。 它是官方推荐方式,并且可以避免一些潜在运行时异常。

    63121

    Android:Jetpack之视图绑定——ViewBinding

    使用这些架构开发出应用,从项目质量、代码可读性与可维护性来说,都更加出色,所以这些框架和技术逐渐流行起来。...Data Binding→数据绑定,可使用声明式将布局界面组件绑定到应用数据源; Lifecycles→生命周期感知,可感知和响应Activity和Fragment生命周期状态变化; LiveData...实际开发,也是这部分组件用得多一些,Jetpack库可单独使用,也可以组合使用,开发者可按需选择。...对此,官方还进行了更细致分类,具体可见: 《按类型探索Jetpack库》 关于Jetpack简介就到这里,选型弄清楚组件存在缘由、责任边界,就能有的放矢。...HashMap,id为key,控件实例为value,当用到控件,先查HashMap该id对应实例是否缓存,是返回,否findViewById获取实例存到HashMap,同时把找到实例返回。

    1.1K30

    Android 低功耗蓝牙开发(扫描、连接、数据交互)Kotlin版

    当程序编译完成之后,运行到自己手机上,先确保项目配置这一步没有问题。 二、页面设计   首先改一下主题颜色,列标题,改成绿色。...扫描之前要判断Android版本,6.0及以上需要动态请求权限,请求之后要判断蓝牙是否打开,蓝牙打开权限也有了就可以点击扫描蓝牙开始扫描了,扫描显示加载条表示正在扫描,扫描到设备后添加到列表,页面上渲染出来...BaseQuickAdapter源码没有提到ViewBinding,倒是提到了DataBinding,很明显这是两回事,因此我们需要自己扩展一下,让BaseQuickAdapter可以使用ViewBinding...onCreateDefViewHolder,创建默认到ViewHolder,然后就是根据这个传进来VB进行一个相应编译类寻找,因为ViewBinding使用了编译技术,会在布局完成构建一个编译类...,这个类对应一个xml文件,因此通过这个ViewBinding去反射拿到对应类,再通过这个类名infalte,infalte相信你不会默认,因为MainActivity也用到了这个,然后通过infalte

    1.8K20

    Android 低功耗蓝牙开发(扫描、连接、数据交互)Kotlin版

    当程序编译完成之后,运行到自己手机上,先确保项目配置这一步没有问题。 二、页面设计   首先改一下主题颜色,列标题,改成绿色。...扫描之前要判断Android版本,6.0及以上需要动态请求权限,请求之后要判断蓝牙是否打开,蓝牙打开权限也有了就可以点击扫描蓝牙开始扫描了,扫描显示加载条表示正在扫描,扫描到设备后添加到列表,页面上渲染出来...BaseQuickAdapter源码没有提到ViewBinding,倒是提到了DataBinding,很明显这是两回事,因此我们需要自己扩展一下,让BaseQuickAdapter可以使用ViewBinding...onCreateDefViewHolder,创建默认到ViewHolder,然后就是根据这个传进来VB进行一个相应编译类寻找,因为ViewBinding使用了编译技术,会在布局完成构建一个编译类...,这个类对应一个xml文件,因此通过这个ViewBinding去反射拿到对应类,再通过这个类名infalte,infalte相信你不会默认,因为MainActivity也用到了这个,然后通过infalte

    2.9K31

    Android Studio 4.0新特性及升级异常问题解决方案

    您可以选择一个或多个线程以仅在那些选定线程右列查看分析。单击事件还会在右侧栏显示对所选事件分析。 5....Java 8库D8和R8desugaring 通过一个称为desugaring过程,您现在可以使用许多Java 8语言API,而无需为您应用程序设置最低API级别。...使用Android Studio,某些IDE功能(例如“项目结构”对话框和构建脚本快速修复程序)现在还支持读写Kotlin构建脚本文件。...用于代码收缩规则智能编辑器功能 当您打开R8代码收缩规则文件,Android Studio现在提供智能编辑器功能,例如语法突出显示,代码完成和错误检查。...Fragment片段和模板 现在,可以通过导航到“文件” “新建” “片段” “画廊”,或在“导航”编辑器单击“创建新目的地”,来使用Create new destination 向导和新片段模板。

    3.7K21

    System Generator学习——时间和资源分析

    第 1 步,您将学习如何在 System Generator 中进行时序分析 第 2 步,您将学习如何在 System Generator 执行资源分析 三、步骤 1 :系统生成器时序分析...Generator 对话框单击 “生成”,生成显示如下信息: a....时序路径数据采集结束,关闭 Vivado 项目,并将控制传递给 MATLAB/System Generator 进程 d....,并显示为红色 ⑥、通过单击 Timing Analyzer 表任何路径,从 Timing Analyzer 表交叉探测到 Simulink 模型,这将突出显示模型相应 System Generator...表中选择块将以黄色突出显示,并以红色概述 ⑥、如果在表中选择块或子系统位于上层子系统,那么除了下面所示底层块之外,父子系统将以红色突出显示 总结 本实验,学习了如何在系统生成器中使用时序和资源分析

    28030

    Android Ble蓝牙App(一)扫描

    一、基本配置   当前我们创建项目有一个MainActivity,然后我们需要打开viewBinding开关,appbuild.gradleandroid{}闭包添加如下代码: buildFeatures...随后我们就可以Activity中使用ViewBinding了,常规使用方式是这样: class MainActivity : AppCompatActivity() { private...中封装通常采用反射方式,Kotlin如果要对ViewBinding进行封装的话同时利用上Kotlin一些特性的话,可以这样做,原文地址如下:Viewbinding使用和委托封装,感觉写得蛮好,..." ...> 三、扫描页面   Android12及以上版本,使用蓝牙需要请求扫描、连接权限、如果还需要使用手机作为从机的话,就请求广播权限,后面会提到,同时低版本Android...,结合了ViewBindingonBindViewHolder()中进行数据渲染,那么适配器就写好了,下面我们回到ScanActivity,去完成后扫描结果显示

    1.1K60

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

    Adapter 用法 4.使用include包含布局嵌套布局 四、总结 一、前言 最近放寒假了,终于有空做项目了,想着把之前一些项目重构一下,碰巧重构到 view Binding 这块,之前都是用...kotlin 那个扩展,其实刚开始做项目的时候这个就已经废弃了,由于当时自己有点懒,没去学习这个新代替方案,所以就成为一个历史遗留问题,参考官方文档 view Binding 官方文档,这里只是针对目前使用几个场景进行重构...Activity 用法 首先创建一个延迟初始化binding变量,然后创建activity进行初始化,设置当前view,只需用binding.root即可获取 private lateinit...Fragment 用法 这个和Activity差不多,就是初始化不一样,这边采用一种比较安全策略使得bindingfragment内部不能被修改,bindingget方法为_binding,...Adapter 用法 这个稍微麻烦一点,不过原理还是一样,下面这个例子即可说明,针对那些使用findViewById进行了一些优化,这里涉及item复用,注意变量作用域范围,考虑binding

    86310

    Android Jetpack架构组件(八)之DataBinding

    二、DataBinding基本使用 2.1 开启viewBinding 视图绑定功能可按模块启用,要在某个模块启用视图绑定,请将 viewBinding 元素添加到build.gradle 文件,如下所示...使用variable属性需要使用到布局表达式: @{ }。可以布局表达式@{ }获取传入variable对象值,如下所示。 <?...DataBinding库,DataBinding会针对控件属性生成对应XXXBindingAdapter类,TextViewBindingAdapter类,其对TextView每个可以使用DataBinding...五、RecyclerView使用DataBinding 5.1 基本使用 列表布局Android应用开发是非常常见场景,实现列表布局需要使用RecyclerView控件,DataBinding...RecyclerView使用DataBinding就是如此简单,当Listitem数据发生变化时,列表内容也会随之更新。

    2.2K20

    Android MVI框架搭建与使用

    本文完成后效果图: 正文   每当一个新框架出来,都会解决掉上一个框架所存在问题,但同时也会产生新问题,瑕不掩瑜,可以实际开发,解决掉产生问题,就能够更好使用框架,那么MVI解决了MVVM...二、网络请求   当我们使用Kotlin,网络访问就变得更简单了,只需要Retrofit和协程即可,首先我们com.llw.mvidemo包下新建一个data包,然后data包下新建一个model...ViewModelProvider(),而不是ViewModelProviders.of,这是因为这个API已经被移除了,之前版本是过时弃用,最新版本你都找不到这个API了,所以使用ViewModelProvider...initView()函数是控件一些配置,比如给RecyclerView添加布局管理器和设置适配器,给按钮添加点击事件,点击时候发送意图,发送意图被MainViewModelmainIntentChannel...observeViewModel()函数是对状态收集,状态为Loading,隐藏按钮,显示加载条,然后网络请求会有结果,如果是成功,则在UI上隐藏按钮和加载条,显示列表控件,并添加数据到适配器

    3.4K40
    领券