как в Android recyclerview изменить фон представления другого держателя

#android #kotlin #android-recyclerview #android-viewholder

Вопрос:

введите описание изображения здесь

Картинка появилась, когда я нажал 1.

Я хочу изменить фон других элементов при нажатии на элемент recyclerview

Но, глядя на свой код и размышляя, я не могу изменить другие элементы держателя, когда я нажимаю на элемент просмотра

Я поискал в Google, но не смог найти ответ, потому что не смог найти нужное ключевое слово.

Было бы очень полезно, если бы вы дали мне ответ

первый мой адаптер recyclerview

 class GiftShowCategoryAdapterHolder(parent: ViewGroup) : RecyclerView.ViewHolder(
        LayoutInflater.from(parent.context).inflate(R.layout.item_giftshow_category, parent, false)
    ) {
        fun onBind(item: ArrayList<GiftCardResponse.brandCategories>, viewModel: GiftShowViewModel?, position: Int, holder: RecyclerView.ViewHolder) {
            itemView.run {
                val displaymetrics = DisplayMetrics()
                (context as Activity).windowManager.defaultDisplay.getMetrics(displaymetrics)
                val devicewidth: Int = displaymetrics.widthPixels / 4
                val deviceheight: Int = displaymetrics.heightPixels / 8

                itemView.iv_giftshow_category.layoutParams.width = devicewidth
                itemView.iv_giftshow_category.layoutParams.height = deviceheight

                Glide.with(this).load(item[position].categoryIcon).error(R.drawable.choice_cash)
                    .into(iv_giftshow_category)

                tv_giftshow_category.text = item[position].categoryName

                this.background = context.getDrawable(R.drawable.shape_gray_gift_recycler_stroke)

                setOnClickListener {
                    for(i in 0 until item.size){
                        if(i == position){
                            Timber.d("Checked i $i , position $position")
                            linear_background.background = context.getDrawable(R.drawable.shape_white_gift_recycler_stroke)
                            //it.background = context.getDrawable(R.drawable.shape_white_gift_recycler_stroke)
                        }else{
                            Timber.d("Checked else i $i , position $position")
                        }
                    }
                    viewModel?.getBrandItemsResult(item[position].categorySeq)
                }
            }
        }
    }

    private var giftShowCategoryList = ArrayList<GiftCardResponse.brandCategories>()

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = GiftShowCategoryAdapterHolder(parent);

    override fun getItemCount() = giftShowCategoryList.size

    private var viewModel: GiftShowViewModel? = null

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        (holder as? GiftShowCategoryAdapterHolder)?.onBind(giftShowCategoryList, viewModel, position, holder)
    }

    fun addItem(items: List<GiftCardResponse.brandCategories>) {
        giftShowCategoryList = items as ArrayList<GiftCardResponse.brandCategories>
    }

    fun addViewModel(viewModel: GiftShowViewModel) {
        this.viewModel = viewModel
    }
 

Комментарии:

1. что вы пытаетесь сказать, если вы нажмете на определенный элемент, фон выбранного элемента должен быть изменен правильно ??

2. Нет, это другой вид, на который вы нажали

3. Что вы подразумеваете под «как в Android recyclerview изменить фон другого вида держателя»

4. можете ли вы, пожалуйста, объяснить это хорошо, чтобы я мог понять, чего именно вы хотите достичь..

5. Визуальное представление того, чего вы хотите достичь, может быть полезным

Ответ №1:

  if((position % 2 == 0)){
       holder.cardView.setCardBackgroundColor(R.color.list_even_color);
 }else{
     holder.cardView.setCardBackgroundColor(R.color.list_odd_color);
}
 

Комментарии:

1. Если вы ответите на этот вопрос, вы будете знать, что меняется только тот держатель, который у вас есть.

Ответ №2:

Я помещаю oldPosition и newPosition в адаптер, сравниваю его с текущей позицией, передаю событие click в viewmodel, наблюдаю за живыми данными viewmodel и заменяю данные только соответствующим значением в адаптере.