public void addSets(ViewHolder holder, Routine routine) {
SetsList newSetsList = new SetsList(String.valueOf(setIndex++ +1) + "set", 0 + "kg", 0 + "reps");
setsLists.add(newSetsList);
// routine의 자식 아이템을 업데이트 하는 부분이 안보여요. routine.setItems(setsLists)
updateRoutine(routine);
}
// ViewHolder는 사용하지 않으므로 삭제하세요. 그럼 아래처럼 되겠죠.
public void addSets(Routine routine) {
}
public void updateRoutine(Routine routine) {
int index = this.routines.indexOf(routine);
if(index < 0) throw new NoSuchElementException("Cannot find routine");
this.routines.set(index, routine);
notifyItemChanged(index);
}
addSets를 보시면 결국 어댑터 안에 있을 필요가 없는 메소드입니다. 다시 한번 말씀 드리지만, 어댑터의 역할과 데이터를 추가하는 역할에 대해서 구분을 명확하게 하시는게 좋아요. 어댑터는 리스트 아이템 추가하는 일에 관여할 필요가 없는 클래스입니다. 화면에 주어진 데이터로 잘 보여주기만 하면 되는 게 본래의 역할입니다.
그리고 뷰홀더의 내부를 onViewBindHolder 에서 조작하는 것도 마찬가지로 좋지 않습니다. 어댑터는 ViewHolder의 내부가 어떻게 구성되는지 알 필요도 없고 알지 않는 것이 OOP의 구조상 바람직합니다. 이건 내가 다른 사람의 은행 계좌에 송금을 하기 위해서 은행시스템에서 트랙잭션이 어떻게 처리되는지 알아야 하는 것과 비슷합니다. 뷰홀더의 일은 뷰홀더에게 맡기세요.
자기 역할이 아닌 코드는 해당 역할을 하는 쪽으로 옮기는게 좋습니다.