Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Servlet
- 스프링 핵심 기능
- springdatajpa
- jpa
- 자바
- JDBC
- AOP
- Exception
- db
- 알고리즘
- java
- Android
- Thymeleaf
- Spring Boot
- transaction
- JPQL
- pointcut
- 백준
- 스프링
- Proxy
- kotlin
- http
- 스프링 핵심 원리
- SpringBoot
- 인프런
- spring
- 김영한
- Greedy
- QueryDSL
- 그리디
Archives
- Today
- Total
개발자되기 프로젝트
[Android] RecyclerView 본문
RecyclerView는 ListView의 확장판으로 볼 수 있다.
RecyclerView는 Adapter의 ViewHolder를 사용하여 View를 재활용 한다.
RecyclerView는 화면에 보이는 View만 생성한다.
1. Item Layout
각 item이 어떻게 들어갈지 와꾸(?)를 잡아야 한다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/rv_item"
android:text="Title"
android:textSize="30sp"
android:layout_margin="20sp"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
2. 사용할 Activity에서 RecyclerView 추가
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
3. Adapter 생성
itemLayout과 data를 연결하는 역할
//사용할 data를 받음, RecyclerView의 Adapter 상속
class RvAdapter(val items: MutableList<String>) : RecyclerView.Adapter<RvAdapter.ViewHolder>(){
//ViewHolder객체 생성 및 리턴
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RvAdapter.ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.rv_item, parent, false)
return ViewHolder(view)
}
//RecyclerView는 setOnclickListener제공안함. 직접 선언.
interface ItemClick{
fun onClick(view:View, position: Int)
}
var itemClick: ItemClick? = null
//ViewHolder가 재활용 될 때 사용하는 메서드
override fun onBindViewHolder(holder: RvAdapter.ViewHolder, position: Int) {
//ionCLick 선언
if (itemClick != null){
holder.itemView.setOnClickListener{
v -> itemClick?.onClick(v, position)
}
}
//holder에 item을 bind
holder.bindItems(items[position])
}
//전체 recyclerview 갯수
override fun getItemCount(): Int {
return items.size
}
//itemView를 들고있는 class, 말 그대로 view를 hold
class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){
//각 itemView에 data 매핑
fun bindItems(item: String){
val rv_text = itemView.findViewById<TextView>(R.id.rv_item)
rv_text.text = item
}
}
}
4. RecyclerView의 Adpater, LayoutManager 지정
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val items = mutableListOf<String>()
items.add("A")
items.add("B")
items.add("C")
val rv = findViewById<RecyclerView>(R.id.rv)
val rvAdapter = RvAdapter(items)
rv.adapter = rvAdapter
rv.layoutManager = LinearLayoutManager(this)
//item click 직접 구현.
rvAdapter.itemClick = object : RvAdapter.ItemClick{
override fun onClick(view: View, position: Int) {
Toast.makeText(baseContext, items[position], Toast.LENGTH_SHORT).show()
}
}
}
}
'인프런 > [인프런] 앱 8개를 만들면서 배우는 안드로이드 코틀린' 카테고리의 다른 글
[Firebae] Firebase 사용하기, 익명 로그인 (0) | 2022.03.22 |
---|---|
[Android] Fragment, Navigation (0) | 2022.03.20 |
[Android] ListView 복습 (0) | 2022.03.20 |
[Kotlin] list에서 random 값 뽑기 (0) | 2022.03.20 |
[Android] 뒤로가기, handler, finish (0) | 2022.03.20 |
Comments