
Epoxy를 사용중입니다( 리사이클러뷰 대체)
제 기능이 아이템을 추가 삭제하는 기능이 많아 동적으로 변화가 많은 편인데,
아이템이 충분히 추가되었을때 EditText에 값을 입력후 스크롤하거나 추가로 아이템을 추가하면
EditText에 있던 값이 없어지거나 다른 아이템에 랜덤으로 배치되는 현상이 생겼습니다.
이걸 해결하기 위해서
TextWatcher를 사용해서 입력후 ViewModel 을 거쳐 repository에 있는 Model에 저장한 후에
Epoxy(RecyclerView)에서 스크롤이나 아이템 추가로인한 재빌드가 될때 값을 불러와 그대로 값을
셋팅할 수 있도록 생각중인데요,
문제가 두가지? 정도있습니다.
문제1. 사진속의 색깔 박스하나하나가 아이템인데 이때 EditText에 포커싱되었을떄
이 해당 위치에 맞는 아이템을 어떻게 찾는지 궁금합니다.
정확히는 어떻게 찾는지 보다는 버튼이 클릭되었을때 setOnClickListener이 호출되는 것처럼
EditText에 포커싱 되었을때 콜백함수같은것이 있는지 궁금합니다.
위치는 아이템 내에 저장한 UUID같은걸로 비교해서 찾으려고합니다..
문제2. 위에서 아이템에 저장된 UUID로 찾는다고 헀는데 여기서 또한 문제가
이 아이템에 저장된 ID는 사진속의 박스(모델)하나에 대한 ID입니다.
그런데 박스 안에는 EditText가 두가지가 있습니다. 두가지 다 각각 다른 프로퍼티에 저장되어야할텐데,
이 각각의 위치를 어떻게 알아야하는지 궁금합니다.
혹은 더 좋은 방법이 있다면 알려주세요ㅠ
그리고 옳은 방법인지는 모르겠으나 TextWatcher는 ViewModel 혹은 Repository에 위치할 예정입니다..
-----------------
data class RoutineDetailModel(
val id: String // UUID 사용
val set: Int, // 세트
val weight: String,
val reps: String = "1") {
}
// 가공된 데이터를 RV(Epoxy)에 나열하기 위한 클래스
sealed class RoutineItem(
val id: String
) {
class RoutineModel(
id: String, // Id, UUID 사용
val workout: String, // 운동 종목
val unit: String, // 무게 단위 (kg or lbs)
// var routineDetail: List<DetailModel> = listOf() // 단순 RV에 보여주기 위한것이므로 여기서는 상세 프로퍼티가 필요없을듯
) : RoutineItem(id)
class DetailModel(
id: String, // Id, UUID 사용
val set: Int, // 세트
var weight: String,
val reps: String = "1",
) : RoutineItem(set.toString())
}