LazyColumn + SwipeToDelete를 사용한 Todo 리스트 화면을 만들면서 겪은 일
Room을 사용해서 가져온 Todo 아이템들을 LazyColumn을 통해서 화면에 리스트로 보여주고 있었다. 각 항목을 왼쪽으로 swipe하면 삭제할 수 있고, 삭제했을 때 뜨는 SnackBar 알림의 'UNDO' 버튼을 클릭하면 방금 삭제한 아이템을 다시 DB에 추가해서 화면에 다시 보여줄 수 있는 기능이 있다.
그런데 삭제한 아이템을 다시 DB에 추가해서 화면에 표시할 때, LazyColumn의 아이템이 swipe된 상태(dismissed) 그대로 다시 추가되는 현상이 발생했다.
items(...)
의 key값으로 사용하고 있었다.다시 추가된 Todo 데이터의 id가 dismissed된 항목의 id와 같기 때문에 마지막 상태(dismissed) 그대로 다시 화면에 항목이 보이게 된 것이다.
DB에 데이터를 다시 추가할 때 id 값을 0으로 변경하고 넣어줬더니 해당 현상은 사라졌다.
똑같은 key값으로 항목이 다시 추가되면 마지막 상태 그대로 항목이 표시될 줄은 몰랐다......