728x90
반응형
작년 가을 이후로 안드로이드를 만진 적이 없는데, 요즘 다시 붙잡고 있다.
오랜만에 (반년전이지만 나에겐 큰 시간) 만지니 날아간 기억들이 있어 복습한다는 느낌으로 자료를 찾아가며 진행중이다. Recycler view는 사용방법이 무조건 익숙해야한다고 느껴서 이번에 제대로 뽀갰다.
우왕 이모티콘 생겼다. 업데이트된듯 !
1. RecyclerView 관련 XML element 생성
리사이클러뷰androidx.recyclerview.widget.RecyclerView 와 그 아이템 뷰 생성
아이템 뷰 Root layout 크기 속성은 아래와 같이 권장한다.
- item_room.xml
android:layout_width="wrap_content"
android:layout_height="wrap_content"
리사이클러뷰 생성시 아래 속성을 반드시 입력해야한다.
- HomeActivity.kt 의 <androidx.recyclerview.widget.RecyclerView>
android:orientation="horizontal" //아이템 수평 배치 (가로 flow)
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
2. VO class 생성
Recycler View에 필요한 데이터 객체 정의. 나는 Room이란 객체를 정의하고자 한다.
- RoomVo.kt
class RoomVo(var title: String, var desc: String, var day: String)
3. Adapter class 생성
ViewHolder 내부 클래스, 오버라이드 필수 메서드(onCreateViewHolder, onBindViewHolder, getItemCount) 정의
- RoomViewAdapter.kt
class RoomViewAdapter(val context: Context, private val RoomData: ArrayList<RoomVo>): RecyclerView.Adapter<RoomViewAdapter.ViewHolder>(){
//RoomData: 바인딩 될 데이터 객체 배열
inner class ViewHolder(view: View?) : RecyclerView.ViewHolder(view!!){
//데이터가 바인딩 당할 Item XML 내부의 elements들
val title = view?.findViewById<TextView>(R.id.title_meeting_item)
val desc = view?.findViewById<TextView>(R.id.desc_meeting_item)
val day = view?.findViewById<TextView>(R.id.date_meeting_item)
fun bind(room: RoomVo, context: Context){
title?.text = room.title
desc?.text = room.desc
day?.text = room.day
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(context).inflate(R.layout.item_room, parent, false)
//바인딩 당할 Item XML 파일명 지정 --R.layout.item_room
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
//데이터를 순서대로 바인딩 --포지션(인덱스)값을 활용 가능. 현재는 모든 값 바인딩
holder.bind(RoomData[position], context)
}
override fun getItemCount() = RoomData.size //어탭터로 바인딩된 아이템 개수 반환
}
4. Adapter 호출
- HomeActivity.kt
class HomeActivity : AppCompatActivity() {
lateinit var roomsRecyclerView: RecyclerView
lateinit var roomAdapter: RoomViewAdapter
var roomData = ArrayList<RoomVo>() //바인딩 될 객체 데이터 리스트
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)
roomsRecyclerView = findViewById(R.id.rooms_recycleView_home)
roomAdapter = RoomViewAdapter(this, roomData)
roomsRecyclerView.adapter = roomAdapter //리사이클러뷰에 어댑터 지정
}
}
728x90
반응형
'studies > Mobile Application' 카테고리의 다른 글
[Kotlin/Android] Fragment Activity에서 Image Cropper와 CircleImageView 사용하기 (0) | 2021.06.16 |
---|---|
[Android Studio] Gradle No cached version available for offline mode 해결 (0) | 2021.05.30 |
Android remove shadow at button (0) | 2021.04.30 |
Android activity 상단바(appbar, toolbar)에 버튼 만들기 (0) | 2020.11.14 |
안드로이드 스튜디오 SDK 오류 / 실제 기기에서 실행 안됨 에러 해결 (2) | 2020.11.03 |