Выберите только один ImageView за раз внутри RecyclerView Adapter - PullRequest
0 голосов
/ 30 января 2019

У меня RecyclerView, заполненный разными изображениями, когда пользователь нажимает одно из них, я накладываю границу, чтобы выделить изображение.Все работает нормально, однако, пользователь может щелкнуть несколько изображений, и все они будут выделены, я хочу выбрать только одно по одному.У меня есть поиск по нескольким сайтам и постам, но ни у одного из них нет решения, которое бы работало на меня.Вот изображение:

Image selected

Я использую прослушиватель щелчков ImageView, а не ItemClickListener.

Вот код адаптера:

import android.content.Context
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView

class AccountViewHolder(view: View) : RecyclerView.ViewHolder(view) {
    var accountImage: ImageView = 
        view.findViewById(R.id.account_image_placeholder)
}

class AddEditAccountAdapter(private var context: Context, private var 
    accountImages: ArrayList<String>) :
    RecyclerView.Adapter<AccountViewHolder>() {

       override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): 
AccountViewHolder {
    val imageItem = LayoutInflater.from(context).inflate(
        R.layout.account_image_item,
        parent, false
    )

    return AccountViewHolder(imageItem)
}

override fun getItemCount(): Int {
    return accountImages.size
}

override fun onBindViewHolder(holder: AccountViewHolder, position: Int) {

    val accountImageId =
        context.getResources().getIdentifier(accountImages.get(position), "drawable", context.getPackageName())

    holder.accountImage.setImageResource(accountImageId)

    holder.accountImage.setOnClickListener {

        holder.accountImage.setBackgroundResource(R.drawable.image_highlight)
    }
}
}

1 Ответ

0 голосов
/ 30 января 2019

у вас должно быть глобальное поле для хранения вашей позиции selected, как показано ниже:

var selectedPos = -1 // hold selected position in your adapter
// in your bindView, because your view will be reused, you should always check the selected position to set the suitable background
holder.accountImage.setBackgroundResource(if(selectedPos == position) yourImageHightlight else yourNormalImage)

holder.accountImage.setOnClickListener {
    selectedPos = position
    notifyDataSetChanged()// or something like notifyItemChanged()...
}
...