Добавить изображение в элементы из RecyclerView (программно) - PullRequest
0 голосов
/ 06 мая 2020

Я добавил несколько «значков», которые были созданы программно в адаптере 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
    }


}
...