본문 바로가기
Android & Kotlin/Android

[코틀린] 안드로이드 리사이클러뷰 특정뷰(아이템) 클릭

by 말린밴댕이_공부 2022. 12. 29.
반응형

뷰홀더에서 클릭시 로그를 찍어봤을때 adapterposition이 나오게 되는것을 확인할 수 있다.

그렇다는것은 이미지도 여기서 설정을 해줄 수 있지 않을까 생각한다.

그리고 다음에 혹시 뭐 즐겨찾기 추가를 했을때 그에 대해서 서버에 통신을 보내주면서 추가를 해주는것도 앞으로 가능하다고 생각한다.

class RestaurantAdapter(var restaurantList: List<Data>) : RecyclerView.Adapter<RestaurantAdapter.RestaurantViewHolder>(){

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RestaurantViewHolder {
        val binding = RestaurantListBinding.inflate(LayoutInflater.from(parent.context),parent,false)

        return RestaurantViewHolder(binding)
    }

    override fun onBindViewHolder(holder: RestaurantViewHolder, position: Int) {
        holder.bind(restaurantList[position])

    }

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

    inner class RestaurantViewHolder(val binding : RestaurantListBinding) : RecyclerView.ViewHolder(binding.root){
        @SuppressLint("SetTextI18n")
        fun bind(data: Data){
            with(binding){
                var isFavorite : Boolean = false
                tvListName.text = data.name
                tvListAddress.text = data.address
                tvSerial.text = "${data.serial}."

                ivAddFavorite.setOnClickListener {
                    if(!isFavorite)
                        ivAddFavorite.setImageResource(R.drawable.ic_home_addfavorite)
                    else
                        ivAddFavorite.setImageResource(R.drawable.ic_home_favorite)
                    isFavorite = !isFavorite
                }

            }

        }
    }
}

리사이클러뷰 어댑터를 우선 기본적인 틀을 구성을 해주는데

with(binding){
			var isFavorite : Boolean = false

      ivAddFavorite.setOnClickListener {
         if(!isFavorite)
              ivAddFavorite.setImageResource(R.drawable.ic_home_addfavorite)
         else
              ivAddFavorite.setImageResource(R.drawable.ic_home_favorite)
         isFavorite = !isFavorite
}

이 fun bind함수를 통해 데이터를 bind함과 동시에 클릭을 했을때에 대해서 이미지를 바꿔주는 작업을 진행하였다.

val restaurantAdapter = RestaurantAdapter(result.data)
binding.rvRestaurant.adapter = restaurantAdapter

이제 메인문에 어댑터를 연결하게 된다면 연결이 되는 상황이 나오게 된다.

반응형

댓글