>

다른 이미지로 채워진 RecyclerView가 있습니다. 사용자가 하나를 클릭 한 다음 테두리를 적용하여 이미지를 강조 표시합니다. 모든 것이 잘 작동하지만 사용자가 여러 이미지를 클릭하면 모든 이미지가 강조 표시됩니다. 한 번에 하나만 선택하고 싶습니다. 여러 사이트 및 게시물을 검색했지만 그 중 어느 것도 나를 위해 효과적인 솔루션을 가지고 있지 않습니다. 여기 이미지가 있습니다 :

ItemClickListener가 아니라 ImageView 클릭 리스너를 사용하고 있습니다.

어댑터 코드는 다음과 같습니다 :

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

    당신은 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()...
    }
    
    

관련 자료

  • 이전 python - dict의 KeyError이지만 Key가 존재합니다
  • 다음 angular - 페이지 다시로드시 업데이트 만 보시겠습니까?