[Android] RecyclerView
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)
}
}
Author And Source
이 문제에 관하여([Android] RecyclerView), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@seulg2027/android-RecyclerView저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)