이 글은 이것이 안드로이드다 with 코틀린(개정판)를 참고하여 작성하였습니다.
작성자 : 정현민
개발환경은 Windows, Android Studio입니다.
1. 리사이클러뷰란?
"많은 수의 데이터 집합을, 제한된 영역 내에서 유연하게(flexible) 표시할 수 있도록 만들어주는 위젯"
2. 리사이클러뷰 설정
MainActivity>recycleview>ID와 constraint설정 title: RecycleView

res>layout>우클릭>New>layout Resource File

(+root element를 바꿔주면 코드도 자동으로 바뀐다)

현재 레이아웃에서 textView 3개 입력>속성 weight값 1:5:3으로 입력>layout width값=0 (비율 적용)

new>kotlin File/Class>'memo'라는 이름의 class 생성
3. data class 설정
//memo
data class memo (var no:Int, var title:String, var timestamp:Long)
-데이터 구조를 잡기 위해 data class를 설정하는 코드
4. data 생성
// MainActivity
fun loadData(): MutableList<memo>{
val memoList = mutableListOf<memo>()
for(no in 1..100){
val title = "이것이 안드로이드다 $no"
val date = System.currentTimeMillis()
val memo = memo(no, title, date)
memolist.add(memo)
}
return memolist
}
-가상의 데이터를 생성하는 code
✔$no: 타이틀이 똑같으면 안되니깐 증가하는 숫자를 붙여 구분하기 위함
✔100개의 memolist를 생성받을 수 있도록 반복문 구조
5. adapter을 이용하여 item을 화면에 출력하기
※adapter 생성 코드를 만들기 전 build.gradle에 가서 binding을 먼저 해야함
buildFeatures{
viewBinding true
}
class CustomAdapter(val listData:MutableList<memo>) : RecyclerView.Adapter<CustomAdapter.Holder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
val binding = ItemRecyclerBinding.inflate(LayoutInflater.from((parent.context),parent, false))
return Holder(binding)
}
override fun onBindViewHolder(holder: Holder, position: Int) {
//1. 사용할 데이터를 꺼내고
val memo = listData.get(position)
//2. 홀더에 데이터를 전달
holder.setmemo(memo)
override fun getItemCount(): Int {
return listData.size
}
-adapter 생성하는 코드
✔RecyclerView.Adapter을 상속받아 CustomAdapter 생성
✔adapter가 holder를 가지고 item layout에 값을 세팅할 것이라는 의미
✔binding 코드까지 작성한 후 Ctrl+i를 입력해 override 3가지를 입력
(+override fun getItemCount() = listData.size로 짧게 변경 가능)
화면에 보이는 만큼만 생성해놓고 재사용 하는 것이 recycler의 특징!!
class Holder(binding:ItemRecyclerBinding):RecyclerView.ViewHolder(binding.root){
//3.받은 데이터를 화면에 출력한다.
fun setmemo(memo:memo){
with(binding){ItemRecyclerBinding
textNo.text="${memo.no}"
textTitle.text =memo.title
val sdf = SimpleDateFormat(pattern;"yyyy-MM-dd")
val formattedDate = sdf.format(memo.timestamp)
textDate.text = formattedDate
}
}
}
-adapter에 전달된 목록을 가지고 각각의 item화면에 출력하는 code
✔날짜는 simple date format(sdf)를 이용하여 timestamp를 날짜 형태로 변환
val binding by lazy {ActivityMainBinding.inflate(LayoutInflater)}
이 코드를 이용해 전체 코드를 연결한다.
'GDSC HUFS 3기 > Android with Kotlin Team 4' 카테고리의 다른 글
| [4팀] 14-7,8. 화면 구성하기:커스텀뷰, 커스텀위젯 (0) | 2021.11.13 |
|---|---|
| [4팀]14-5~6 화면 구성하기:프래그먼트, 프래그먼트끼리 값 주고받기 (0) | 2021.11.09 |
| [4팀]14-2~3. 화면구성하기:스피너 (0) | 2021.11.08 |
| [4팀]14-1. 화면 구성하기:액티비티 값 주고받기, 뷰바인딩 (0) | 2021.11.08 |
| [4팀] 12~16. 레이아웃, 리스너, 버튼과 스트링 소스, Dimen 리소스, color 리소스, 텍스트뷰 (0) | 2021.10.30 |