본문 바로가기
반응형

Android28

[Android] LiveData에 대해 알아보자 앞선 글에서 ViewModel에서 알아보았습니다. 이제 우리는 ViewModel이 어떤 역할을 하는지 알고 있습니다. ViewModel을 통해 UI 관련 데이터를 관리해주고 View에 데이터를 그려줄 수 있다는 것을 압니다. 하지만 여기서 문제가 생깁니다. 한 번 그려진 View는 데이터가 변화했다고 일반적으로 다시 그려주지 않습니다. 그렇다고 Activity나 Fragment를 다시 그리기에는 불필요한 비용이 듭니다. 그렇다면 데이터의 변경에 따라 즉각적으로 View의 일부분만을 갱신해줄 수 있는 방법이 무엇이 있을까? 그래서 AAC에서 LiveData를 사용해서 해당 문제를 해결해줄 수 있습니다. (물론 현재는 StateFlow를 많이 사용하는 것 같습니다.) LiveData 정의 LiveData의 .. 2022. 5. 10.
[Android] ViewModel Factory에 관하여 ViewModel을 생성할 때는 일반적으로 2가지 경우가 있습니다. ① 파라미터가 있는 경우 ② 파라미터가 없는 경우 일반적으로 파라미터가 없는 경우는 아래와 같이 사용해주면 됩니다. (lifecycle-extensions 모듈 필요) class SimpleViewModel : ViewModel(){ /** Content **/ } 생성하는 것은 2가지 방법으로 생성이 가능합니다. class MainActivity : AppCompatActivity() { private lateinit var simpleViewModel: SimpleViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState.. 2022. 5. 4.
[Android] Intent와 Bundle 무엇이 다를까? (feat. 객체 전달) 흔히 Activity와 Fragment 간에 데이터를 전달할 때 우리는 Intent와 Bundle을 사용해서 데이터를 전달합니다. 하지만 두 개의 용도는 명확히 다릅니다. Intent는 저장이 아닌 전달하는 수단으로의 객체이고 Bundle은 상태/값 등을 저장하기 위한 객체입니다. Bundle은 Map의 형태로 되어있습니다. Intent에서 데이터를 전달할 때 다음과 같은 두 가지 코드를 보셨을 겁니다. val intent = Intent() intent.putExtra("key","value") val intent = Intent() val bundle =Bundle() bundle.putString("key","value") intent.putExtra("bundle",bundle) 위의 두 코드의 .. 2022. 4. 29.
[Android] 라이브러리 없이 ImageView에 URL 이미지 표시하기 일반적으로 안드로이드에서 URL로 이미지를 표시할 때 Glide라는 오픈소스 라이브러리를 많이 사용합니다. 이번에는 Glide를 사용하지 않고 URL 이미지를 표시해보려고 합니다. 일단 URL 이미지는 네트워크 통신을 통해 이미지를 다운로드하여 표시를 해야 하기 때문에 비동기 처리가 필요합니다. 비동기 처리를 위해 우리는 MainThread가 아닌 비동기 처리할 Thread를 만들어서 따로 처리를 해주어야 합니다. 이를 위해 Java에서 제공하는 라이브러리인 Executor를 사용했습니다. Executor는 네트워크 IO 통신, 디스크 IO 작업 등 백그라운드에서 작업을 위해 사용합니다. (지금은 Kotlin의 coroutine을 주로 사용합니다.) 그리고 Executor의 newSingleThreadE.. 2022. 4. 8.
[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.
반응형

loading