Я добавил несколько «значков», которые были созданы программно в адаптере Recyclerview, но у меня возникла проблема, когда я выполняю поиск, в результате чего элементы меняют значки (см. Изображение)
Это исходный результат (это хорошо, я хочу именно так)
но когда я использую фильтр, я получаю разные значки в разных элементах
результат (другой значок)
это мой адаптер:
class RoomAdapter (var date:String): ListAdapter<Room, RoomViewHolder>(
RoomDiffCallback()){
private lateinit var binding: ListRowRoomBinding
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RoomViewHolder {
val inflater= LayoutInflater.from(parent.context)
binding = ListRowRoomBinding.inflate(inflater, parent,false)
return RoomViewHolder(binding,date)
}
override fun onBindViewHolder(holder: RoomViewHolder, position: Int) {
val item = getItem(position)
holder.apply {
Log.i("HOLDER", "nombre: ${item.roomName} equipo: ${item.equipment}")
item.equipment?.forEach {
createItemsInRoom(it, holder.itemView.context.applicationContext)
}
}
holder.bind(item)
}
fun createItemsInRoom(accessory:String, hcontext:Context){ // I use this method to create de imageView icon
var pixels: Float = 28 * hcontext.resources.displayMetrics.density // 25 are dp
val params = LinearLayout.LayoutParams(pixels.toInt(),pixels.toInt() ) // dp to pixel
var margin: Float = 5 * hcontext.resources.displayMetrics.density
params.marginEnd = margin.toInt() //this is pixel
var iv = ImageView(hcontext)
iv.layoutParams = params
iv.setBackgroundResource(drawable.bg_room_items)
iv.setPadding(12)
when(accessory){
roomStaticEquipent[0] -> iv.setImageResource(drawable.ic_room_pantalla_proyector)
roomStaticEquipent[1] -> iv.setImageResource(drawable.ic_room_televisor)
roomStaticEquipent[2] -> {
iv.setImageResource(drawable.ic_room_phone_call)
iv.setPadding(16)
}
roomStaticEquipent[3] -> {
iv.setImageResource(drawable.ic_room_proyector)
iv.setPadding(10)
}
roomStaticEquipent[4] -> iv.setImageResource(drawable.ic_room_webcam)
roomStaticEquipent[5] -> iv.setImageResource(drawable.ic_room_pizarra)
else -> iv.setImageResource(drawable.ic_room_no_logo)
}
binding.roomItemContainer.addView(iv)
}
class RoomDiffCallback : DiffUtil.ItemCallback<Room>() {
override fun areItemsTheSame(oldItem: Room, newItem: Room): Boolean {
return oldItem.roomId === newItem.roomId
}
@SuppressLint("DiffUtilEquals")
override fun areContentsTheSame(oldItem: Room, newItem: Room): Boolean {
return oldItem == newItem
}
}