
사진은 지난번에 썼던걸 재사용합니다. 그냥 대충 이런 기능이라는것 이다라는걸 설명하기위함입니다.
저렇게 Detail 아이템을 추가하고 저장버튼(사진에는 나타나있지않음)을 눌러서 전체 저장을 하고
첫화면으로 이동하게 되는 것인데요,
여기서 저 추가버튼과 저장버튼을 할때 어떻게 해야할지 잘 모르겠습니다.
Room을 사용하려고 하고 있는데요,
지금은 Room이 없는 상태이기때문에 Detail 아이템을 추가하면 viewmodel 이 관찰해서
detail이 추가된 새로운 list를 postValue해서 화면을 업데이트하는 방식입니다. 즉 Room에 저장은 하지 않고있죠.
여기서 제가 생각하기에 화면 업데이트와 저장에 두가지 정도 방법이있는거 같은데 도와주세요.
1. 추가버튼을 눌렀을때 현재와 마찬가지로 DB에 저장하지 않고 LiveData 의 List에 postValue만 하여 화면만
업데이트하고 최종적으로 저장버튼을 눌렀을때 모든 Detail List를 저장하는 방법
2. 추가버튼을 눌렀을때 Detail 아이템을 하나하나 insert 하여 DB에 저장하고 화면 업데이트는
DAO에서 모든 리스트를 가져오는 Query문을 작성해 getAll() 하여 LiveData 형태로 리스트를 가져와
화면을 업데이트하고 저장버튼을 눌렀을때는 1번과 마찬가지로 다시 Detail 리스트를 저장하는 방법.
@Dao
interface DetailDao {
@Query( // 모든 리스트를 가져오는 query 문)
fun getAllDetails() : LiveData<List<Detail>>
@Insert
fun insert(detail: Detail)
@Insert
fun save(list: List<Detail>)
@Delete
fun delete(detail: Detail)
}
이렇게 두가지 정도 생각햇는데요.. 어떤게 더 낫나요.? 다른 샘플 코드들을 보면,
저처럼 버튼을 눌러 추가할때는 2번 방법이 대부분이더라구요.
버튼을 눌러서 insert하고 화면 업데이트는 getAll을 LiveData<List<>>형태로 가져와서 observe해서
업데이트하더라구요..
근데 저는 저장까지 해야하잖아요? 그래서 추가버튼으로 인해 각각의 Detail이 insert 되어있는 상황에서
또다시 저장버튼을 눌러 List<Detail>을 저장한다면
테이블의 형태가 꼬인다고 해야할까요? 그렇게 되어버려서 1번방법이 더 어울리지 않나 싶은데
어떻게하는게 효율적일까요?