반응형 개발44 [Android] Adapter에서 ViewModel 사용하기 개인 프로젝트를 하던 중, 리스트의 아이템을 삭제하고 변경 사항을 Room에 저장하기 위해 ViewModel을 사용해야 했다. 처음에는 ViewModel의 인스턴스를 adpater 생성 시에 같이 넘겨주려고 생각을 했었다. 하지만 찾아보니 Adapter가 ViewModel의 인스턴스를 가지고 있다면 ViewModel 생명 주기가 더 길기 때문에 메모리 해제가 안 될 수 있기 때문에 웬만하면 adapter에는 표시해줄 데이터만 넘겨주어야겠다는 생각이 들었다. 그래서 callback 함수를 구현해서 이벤트를 넘겨주기로 했다. 이전에 커스텀 다이얼로그를 만들 때 구현해봐서 어렵지 않게 구현할 수 있었다. 준비물은 다음과 같다. (내 실제 코드의 일부분이다. 불필요한 부분들은 모두 삭제했다.) Listener를.. 2022. 3. 30. [Android] 빌드 시에 No cached version available for offline mode 에러 해결방법 옛날에 진행되었던 프로젝트를 수정해야 할 일이 있어서 빌드를 하는데 다음과 같은 오류가 나왔다. (일부만 가져왔다.) > No cached version of com.android.tools.build:gradle:4.1.0 available for offline mode > No cached version of com.android.tools.build:gradle:4.1.0 available for offline mode . . . > No cached version of ... available for offline mode 1시간 동안 다시 빌드도 해보고, 스튜디오도 꺼보고, 다시 Clone도 받아보고 했는데 해결하지를 못했다. 그러다가 공통적으로 No cached version available.. 2022. 3. 17. [Android] ListAdapter에서 submitList()가 동작하지 않는 이유 우리는 ListAdapter를 통해 효과적으로 RecyclerView의 데이터를 갱신할 수 있다. 그리고 새로운 데이터를 갱신할 때 submitList() 이용한다. 하지만 분명 데이터는 변경이 되었지만 실제적으로 RecyclerView에 갱신이 안 되는 경우가 있다. 그 이유는 submitList()를 보면 알 수 있다. Why? submitList()를 타고 가다보면 다음과 같은 코드가 있다. (AsynListDiffer.java 안에 submitList 함수) if (newList == mList) { // nothing to do (Note - still had to inc generation, since may have ongoing work) if (commitCallback != null) .. 2022. 3. 10. [Android] DI(Dependency Injection)란? 예전부터 객체지향 프로그래밍에서는 DI를 잘 사용해야 한다는 말을 들어서인지 이번에 진행하는 새로운 프로젝트에 적용해보고 싶어서 정리를 하게 되었다. 기본에 충실하고자 이번 포스팅은 안드로이드 공식 홈페이지의 내용 + α를 바탕으로 작성하였다. DI(Dependency Injection)란? DI는 Dependency Injection의 줄임말이다. 한국말로 하면 의존성 주입이라고 한다. DI의 정의는 하나의 객체가 다른 객체의 의존성을 제공하는 기술 특정 객체가 다른 객체를 필요로 할 때 외부에서 해당 객체를 생성해서 필요한 객체에게 넘겨주는 것을 의미한다. 이를 통해 프로그램의 결합도를 낮출 수 있다. DI를 통해 개발자가 얻는 이점은 다음과 같다고 한다. 코드 재사용성 - 종속 항목 객체 변경이 쉬.. 2022. 2. 24. [Android] ViewModel 에서 Activity, Fragment 데이터 공유하기 토이 프로젝트를 진행하면서 Android Navigation을 사용했는데 하나의 Activity에 여러 개의 Fragment가 종속되다 보니 데이터를 같이 공유할 필요가 있어서 방법을 찾아보았다. 찾아보니 ViewModel을 통해 Activity와 Fragment 간에 데이터 공유가 가능하다고 하여 적용을 해보았다. 📄 MainActivity.kt class MainActivity : AppCompatActivity() { private val foodViewModel : FoodViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentVie.. 2022. 2. 16. [Android] 실시간 데이터 처리를 위한 STOMP 사용하기 (Kotlin) 새로운 프로젝트를 하면서 실시간으로 갱신되는 데이터 처리가 필요해서 Web Socket 위에서 동작하는 문자 기반 메세징 프로토콜인 STOMP를 사용했습니다. 이번에는 이 STOMP를 프로젝트에 적용하면서 공부했던 내용들을 정리해보려고 합니다. STOMP를 간단히 설명하면 pub/sub 구조를 이용하여 client와 서버가 통신하는 방법입니다. 기존의 Web Socket은 1:1 통신만이 가능했다면 STOMP는 메시지 브로커가 존재하여 1 : N의 관계를 가질 수 있습니다. Message Broker(메시지 브로커)는 Publisher(송신자)로부터 전달받은 메시지를Subscriber(수신자)로 전달해주는 중간 역할이며 응용 소프트웨어 간에 메시지를 교환할 수 있게 합니다. 그리고 기존에는 WebSock.. 2022. 1. 26. 이전 1 2 3 4 5 6 7 8 다음 반응형