#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 и заменяю данные только соответствующим значением в адаптере.