원인

캘린더 화면에서 리뷰를 쓰기 위해 다이얼로그를 띄워 진입하게 된다.

리뷰 작성 페이지에서 캘린더 화면으로 다시 나오면 다이얼로그가 다시 뜨는 현상이 발생하였다.

LiveData를 사용하여 다이얼로그를 띄우는 로직을 구성했었는 데, 이 부분이 문제였다.

  1. 날짜를 롱 클릭 하면 뷰모델 함수를 호출

Untitled

  1. 뷰 모델의 로직을 수행하고 LiveData를 업데이트

Untitled

  1. 캘린더 화면에서 observing하여 다이얼로그 실행

Untitled

Untitled

위와 같은 로직을 통해 다이얼로그가 발생하는데, 리뷰 작성 페이지에서 다시 캘린더 페이지로 나오면 3번 사진에서 LiveData가 유지 되고 있던 터라, observing을 실시하여 한 번 더 다이얼로그를 띄우게 되었다.

처음에는 해결을

Untitled

Untitled

아래와 같이 상태를 없애주는 뷰모델 메소드를 만들어 다이얼로그를 띄우고 그 메소드를 호출하는 방식으로 버그를 해결 했었는데, 찾아보니 별로 좋지 않은 방법이라고 하고, (https://medium.com/androiddevelopers/livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case-ac2622673150)

SingleLiveEvent라는 것을 사용하면 바로 해결 할 수 있다는 것을 찾아내 다시 고쳐보기로 하였다.

해결 과정