인프런 커뮤니티 질문&답변

지현명님의 프로필 이미지
지현명

작성한 질문수

윤재성의 Kotlin 기반 안드로이드 앱 개발 Part1 - UI Programming

45강 RecyclerView

45. RecyclerView의 Adapter에서 viewBinding 문의

작성

·

204

0

//ViewHolder 클래스
inner class ViewHolderClass(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
//val rowImageView = itemView.findViewById<ImageView>(R.id.rowImageView)
//val rowTextView = itemView.findViewById<TextView>(R.id.rowTextView)
var rowView = itemView as RowBinding
val rowImageView = rowView.rowImageView
val rowTextView = rowView.rowTextView

override fun onClick(v: View?) {
binding.textView.text = data1[adapterPosition]
}
}

//항목 구성을 위해 사용할 ViewHolder 객체가 필요할 때 호출되는 메소드
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolderClass {
//val itemView = layoutInflater.inflate(R.layout.row, null)
val itemView = RowBinding.inflate(layoutInflater)
val view = itemView.root
val holder = ViewHolderClass(view)
view.setOnClickListener(holder)

return holder
}


viewBinding으로 Adapter를 변경했는데 앱이 강제 종료 됩니다. 에러 메시지 java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to com.example.recyclerview.databinding.RowBinding 소스 : https://github.com/pulmuone/RecyclerView

답변 3

0

시간이 많이 지나서 이게 도움이 되실지 모르겠습니다.

위에 코드와 많이 다른 부분은 없는 것 같고, viewBinding을 활용해 만들긴 했는데..

이게 맞는지는 모르겠으나 돌아가긴 합니다.

    inner class RecyclerAdapter : RecyclerView.Adapter<RecyclerAdapter.ViewHolderClass>() {
        private lateinit var rowBinding : RowBinding

        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolderClass {
            rowBinding = RowBinding.inflate(layoutInflater)

            val holder = ViewHolderClass(rowBinding)
            rowBinding.root.setOnClickListener(holder)

            return holder
        }

        // ... 2개 함수는 중략...

        // ViewHolder 클래스
        inner class ViewHolderClass(itemView: RowBinding) : RecyclerView.ViewHolder(rowBinding.root), View.OnClickListener {
            val rowImageView = itemView.rowImageView
            val rowTextView = itemView.rowTextView

            override fun onClick(v: View?) {
                binding.textView.text = data1[adapterPosition]
            }
        }
    }

 

위 코드 참고 부탁드립니다.

 

0

지현명님의 프로필 이미지
지현명
질문자

viewBinding 으로 했을때 어떻게 하는지 문의 했던 내용입니다.

0

소프트캠퍼스님의 프로필 이미지
소프트캠퍼스
지식공유자

강좌에서는 var rowView = itemView as RowBinding 로 변환하는 코드를 작성하지 않았습니다. 강좌를 다시 확인해주시기 바랍니다.

지현명님의 프로필 이미지
지현명

작성한 질문수

질문하기