[Android] RecyclerView

7765 단어 kotlinandroidandroid

RecyclerView?

안드로이드 공식문서에 따르면, RecyclerView란 개별 데이터 요소를 재활용한 뷰라고 할 수 있다. 데이터에 해당하는 뷰가 포함된 Viewgroup이다. 내장된LayoutManager를 이용해서 뷰를 한 줄로 표현할 수 있고, 여러 줄로 표현할 수도 있다.

Adapter

Adapter는 뷰와 데이터들을 binding하는 역할을 하는데, 여기서 ViewHolder를 생성하면서 Adapter가 재사용할 뷰를 쉽게 찾을 수 있도록 한다.

class ContentsRVAdapter(val context : Context, val items : ArrayList<ContentModel>) : RecyclerView.Adapter<ContentsRVAdapter.Viewholder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ContentsRVAdapter.Viewholder {
        val v = LayoutInflater.from(parent.context).inflate(R.layout.contents_rv_item, parent, false)
        return Viewholder(v)
    }

    override fun onBindViewHolder(holder: ContentsRVAdapter.Viewholder, position: Int) {
        ...
    }

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

기본 Adapter구성이다.

getItemCount

데이터의 전체 길이를 리턴해주는 함수

onCreateViewHolder

ViewHolder가 생성되는 함수이다. inflate함수를 사용해 viewHolder 객체를 생성해주고 반환한다. 하지만 그 view를 채우지는 않는다. (viewHolder가 특정한 데이터에 binding이 되지 않은 상태)

onBindViewHolder

데이터가 binding될 때마다 새로 호출되는 함수이다.

+) ItemClick

이건 데이터 하나를 클릭했을 때 해당 데이터로 넘어가는 데에 필요한 커스텀 함수이다. 만들어두면 좋다
ContentsAdapter.kt

// 아이템 하나를 클릭했을 때 이동,, 리사이클러뷰
    interface ItemClick {
        fun onClick(view : View, position: Int)
    }
    var itemClick : ItemClick? = null

ContentListActivity.kt

	// 아이템을 클릭하였을 경우
        rvAdapter.itemClick = object : ContentsRVAdapter.ItemClick {
            override fun onClick(view: View, position: Int){
                Toast.makeText(baseContext, items[position].title, Toast.LENGTH_SHORT).show()

                val intent = Intent(this@ContentListActivity, ContentShowActivity::class.java)
                // showActivity로 이동할 시 url 넘겨주기
                intent.putExtra("url", items[position].webUrl)
                startActivity(intent)
            }
        }

좋은 웹페이지 즐겨찾기