ViewModel

    [Android] ViewModel + Event Wrapper Pattern 단일 이벤트 처리

    💬 Single Event 처리 ViewModel의 LiveData를 Observe하고 있으며 값이 True로 변경되면 Toast 메시지를 출력합니다. 그러나, 만약, 디바이스 화면을 회전(Configuration)하였더니 Toast가 한 번 더 호출되는 이슈가 발생합니다 이는 Configuration이 발생하면, 기존 Activity가 Destroy되고 화면이 새롭게 그려지면서 onCreate() 콜백 메서드가 다시금 호출되기 때문입니다. ViewModel은 일반적으로 Activity보다 생명주기가 길기 때문에, Activity가 파괴된다고 하더라도 ViewModel 내부의 필드는 그대로 유지됩니다. 그렇기 때문에 LiveData가 감싸고 있는 데이터는 True 상태를 유지하고 있으며, Activity..

    [Android] MVVM ViewModel 오류 : Can't access ViewModels from detached fragment 해결방법!

    MVVM 패턴을 기반으로 프로젝트를 진행하던 중, 아래와 같은 오류가 발생하였습니다. JNI DETECTED ERROR IN APPLICATION: JNI FindClass called with pending exception java.lang.IllegalStateException: Can't access ViewModels from detached fragment Detached된 Fragment에서 ViewModel에 접근할 수 없다는 내용인데요... 무슨 뜻인지 해석했음에도 불구하고 몇 시간의 삽질을 해야만 했습니다..ㅎㅎ 곰곰이 생각해보니 Android Lifecycle을 조금만 생각해봤다면 금방 해결했을텐데 말이죠.. 😅 어떤 코드에서 오류가 발생하였는지 함께 살펴보겠습니다. 🎈 class M..

    [Android][1] MVVM패턴 Databinding 맛보기!

    * 본 내용은 스스로 학습한 내용을 정리한 게시글입니다. * 데이터바인딩(DataBinding)이란? 기존에는 레이아웃의 뷰를 참조하기 위해서는 아래와 같이 findViewById() 메서드를 사용하였다. val button: Button = findViewById(R.id.my_button) 하지만 이러한 방식은 같은 한 화면에는 여러 개의 뷰가 존재하는 액티비티 클래스에 동일한 메서드를 너무나도 많이 호출시키게 만들어 클린 코드에 적합하지 못하다고 판단하였다. 그래서 등장하게 된 것이 바로 데이터바인딩(DataBinding)이다. 데이터바인딩을 사용했을 때의 장점 1. findViewById를 연속적으로 사용할 필요 없이 binding 객체 하나만 있으면 뷰를 참조할 수 있다. 2. RecyclerV..