问题:想要实现recycleview长按后显示删除图标,但是仅仅能实现当前item删除图标的显示,无法实现所有的item都出现删除图标,错误实现的逻辑是直接在itemView长按事件里面这个改变图片的显示与隐藏状态,这里仅能实现当前item删除图标的显示,所以是行不通的!我这里的代码背景是使用room数据库存数据,然后读取使用recycleview显示,然后在长按,所有的item显示删除图标。本文就记录一下这个问题,增加自己的记忆。
下面就说一下实现逻辑以及部分代码
第一步在RecycleView的adapter数据集合中存放一个变量,也就是在实体类中新增一个布尔变量字段flag 这里的布尔值flag为false,也就是在构造数据集合的时候存入false
//实体--我这里的实体是一个room数据库的实体
@Entity(tableName = "tbl_city_record")
data class Record(var cityName:String,var time: String,var falg: Boolean){
@PrimaryKey(autoGenerate = true)
var id:Long=0
}
//构造的时候传入flase
val recordBean = Record(city, getTime(),false)
这里的第二第三步我都是在onBindViewHolder方法中写的
第二步item长按事件中,使集合中的布尔变量改变使其为true 也就是遍历集合 改变record.flag=true,不要忘记notifyDataSetChanged()刷新
holder.itemView.setOnLongClickListener{
for (record in list) {
record.falg=true
}
notifyDataSetChanged()
return@setOnLongClickListener true
}
第三步判断布尔值如果为true就让删除图标显示,否则就隐藏
if(list.get(position).falg==true){
holder.imgDelete.visibility=View.VISIBLE
}else{
holder.imgDelete.visibility=View.GONE
}