리사이클러뷰 대신에 Epoxy를 사용해서 버튼 클릭시 동적으로 아이템을 추가 및 삭제하는 로직을 작성하고 있는데요,
아이템을 추가 및 삭제하기위해서 position으로 구분하기 위한것이 아닌 id 값을 주어 위치를 구분하여
추가 삭제하려고 합니다.
두개의 타입의 아이템(뷰)들이 존재하는데, sealed 클래스로 관리합니다.
그런데 이전에 작성해주신 참조 코드를 봤을때 ( android - Epoxy 라이브러리 사용해보신분 계신가요? - 안드로이드 Q&A (masterqna.com) )
selead class ListItem {
val id: String,
val title: String
class Parent(
id: String,
title: String
): ListItem(id, title)
class Child(
id: String,
title: String
): ListItem(id, title)
}
이러한 형태로 작성하여 참고하라 하셨습니다.
그래서
sealed class RoutineItem(
val id: String // 필요한가?
){
data class RoutineModel(
val id2: String, // id
val workout: String, // 운동 종목
val unit: String, // 무게 단위 (kg or lbs)
var routineDetail: List<DetailModel> = listOf()
) : RoutineItem(id2)
data class DetailModel(
val set: String, // 세트
val reps: String = "1",
val weight: String
) : RoutineItem(set)
}
대충 이러한 형태로 작성하였는데..
궁금한것이 외부 sealed 클래스에도 id를 위한 프로퍼티가 필요한가 입니다..
이렇게 작성후에 ㅅ디버깅을 해보니 sealed 클래스 내의 data 클래스가 sealed 클래스를 상속하다보니,
id 값도 그대로 상속되어 id 와 id2 두개가 동시에 RoutineModel에 존재하게 되는걸 확인했습니다.
왜 필요한가요?
-------------------------------------
RoutineItem
sealed class RoutineItem(
val id: String
) {
class RoutineModel(
id: String, // id
val workout: String, // 운동 종목
val unit: String, // 무게 단위 (kg or lbs)
var routineDetail: List<DetailModel> = listOf()
) : RoutineItem(id)
class DetailModel(
val set: String, // 세트
val reps: String = "1",
val weight: String
) : RoutineItem(set)
}
RoutineModel
data class RoutineModel2(
val id: String, // 고유 id (UUID 사용)
val workout: String, // 운동 종목
val unit: String, // 무게 단위 (kg or lbs)
var routineDetail: ArrayList<RoutineDetailModel> = arrayListOf()
) {
init {
// 루틴 생성시 최소 1개의 상세 아이템을 가지고 있게 하기 위함
val detail = RoutineDetailModel("1","test","33")
routineDetail.toMutableList().add(detail)
}
fun getSubItemList() : ArrayList<RoutineDetailModel> = routineDetail
fun getSubItemSize() = routineDetail.size
fun addSubItem(item: RoutineDetailModel) {
routineDetail.toMutableList().add(item)
}
fun deleteSubItem() {
routineDetail.toMutableList().removeLast()
}
}
RoutineDetailModel
data class RoutineDetailModel(
val set: String, // 세트
val reps: String = "1",
val weight: String) {
}
ViewModel
class WriteRoutineViewModel : ViewModel() {
private var _items: MutableLiveData<List<RoutineItem>> = MutableLiveData(listOf())
private val routines = mutableListOf<RoutineItem>()
private val rmList = arrayListOf<RoutineModel>()
val items: LiveData<List<RoutineItem>> = _items
fun addRoutine(workout: String) {
routines.add(RoutineItem.RoutineModel(UUID.randomUUID().toString(), workout, "TEST"))
routines.add(RoutineItem.DetailModel("1","3","3"))
_items.postValue(routines)
}
fun getListForRecyclerView() {
//TODO: 리사이클러뷰에 뿌릴 리스트(rmList)를 가공하기
}
}