일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- supervised learning
- C언어
- 머신러닝 강의
- 백준 알고리즘
- 비용함수
- 경사하강법
- java
- 인공지능
- 머신러닝 강좌
- 효묘블로그
- 자바강좌
- 머신러닝
- python강좌
- 지도학습
- c언어 오목
- 파이썬강좌
- 딥러닝
- JAVA강좌
- 자바시작하기
- 자바
- 비지도학습
- 파이썬강의
- 선형회귀
- feature scaling
- unsupervised learning
- 머신러닝공부
- Gradient Descent
- acmicpc.net
- Python강의
- 딥러닝공부
Archives
- Today
- Total
컴공과컴맹효묘의블로그
Android- RecyclerView 라이브러리 본문
반응형
RecyclerView
RecyclerView란 대량의 데이터들을 효율적으로 표시해주는 라이브러리다.
RecyclerView
는 RecyclerView라이브러리의 클래스이다.
RecyclerView는 항목이 화면에서 벗어나더라도 뷰를 제거하지 않는다. 대신 RecyclerView에서 스크롤된 항목을 재사용한다. 이러면 앱의 응답성을 개선하고 전력 소모를 줄여준다.
Key classes
RecyclerView
는 데이터를 담은 뷰들의 집합인ViewGroup
이다.RecylcerView
는 뷰 그 자체이므로 다른 UI를 추가하는 것 처럼 layout에 추가하면 된다.- 리스트의 각 요소들은 view holder 객체에 의해 정의된다. view holder객체가 생성될 때 어떤 데이터랑도 관련이 없다. view holder가 생성되고 난 후에는
RecyclerView
가 viewholder를 데이터에 바인딩 한다.RecyclerView.ViewHolder
를 확장해서 view holder를 정의할 수 있다. RecyclerView
는 adapter를 통해서 데이터를 바인딩하거나 뷰를 request한다.RecylcerView.Adapter
를 확장하여 어댑터를 정의할 수 있다.- layout manager는 리스트의 각 요소들을 정리해준다. RecyclerView 라이브러리에서 제공하는 layout manager를 사용할 수 있고, 사용자 정의 레이아웃을 사용할 수도 있다. 모든 layout manager들은
LayoutManager
추상 클래스를 베이스로 한다.
Adapter 코드
class MyAdapter(val datas: MutableList<String>): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun getItemCount(): Int = datas.size
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder = MyViewHolder(ItemMainBinding.inflate(
LayoutInflater.from(parent.context)))
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
Log.d("myLog", "onBindViewHolder: $position")
val binding = (holder as MyViewHolder).binding
binding.itemData.text = datas[position]
binding.itemRoot.setOnClickListener {
Log.d("myLog", "itemRoot clicked! $position: ${binding.itemData.text}")
}
}
}
Holder 코드
class MyViewHolder(val binding: ItemMainBinding): RecyclerView.ViewHolder(binding.root) {
}
Activity 코드
val ctx = this // fragment라면 val ctx = activity?.applicationContext
binding.recyclerView.layoutManager = LinearLayoutManager(ctx)
binding.recyclerView.adapter = MyAdapter(datas)
binding.recyclerView.addItemDecoration(DividerItemDecoration(ctx, LinearLayoutManager.VERTICAL)) // not essential
Item decoration
아이템 데코레이션은 리사이클러 뷰를 다양하게 꾸밀 때 사용한다. 라이브러리에서 제공하는 아이템 데코레이션은 DividerItemDecoration
만 존재한다.
아이템 데코레이션은 ItemDecoration
을 상속받아 다양한 꾸미기 작업이 가능하다.
// ItemDecoration 상속
class MyDecoration(val context: Context): RecyclerView.ItemDecoration() {
override fun onDraw(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
super.onDraw(c, parent, state)
}
override fun onDrawOver(c: Canvas, parent: RecyclerView, stgate: RecyclerView.State) {
super.onDrawOver(c, parent, state)
}
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecycvlerView.State
) {
super.getItemOffsets(outRect, view, parent, state)
}
}
반응형
'컴퓨터 > Android Studio' 카테고리의 다른 글
Flutter GeneratedPluginRegistrant.java 에러. (0) | 2022.04.15 |
---|---|
Android- DrawerLayout (0) | 2022.03.09 |
Android- 액션바ActionBar와 툴바Toobar (0) | 2022.03.03 |
Android- 플랫폼API, 제트팩 라이브러리 (0) | 2022.03.03 |
Android- platfrom architecture (0) | 2022.03.03 |
Comments