📱 Android 61

[Android] SingleLiveEvent , EventWrapper

SingleLiveEvent : 화면 회전 등 구성요소 변경 시, 이벤트가 여러번 호출되는 걸 방지하기 위해 사용 -> 단일 이벤트 사용 import android.util.Log import androidx.annotation.MainThread import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Observer import java.util.concurrent.atomic.AtomicBoolean class SingleLiveEvent : MutableLiveData() { private val pending = AtomicBoolean(false) @Main..

📱 Android 2023.09.03

[Android] viewModels vs activityViewModels

(Hilt 사용) ViewModel을 초기화할 때 viewModels()만 사용해봤었는데 activityViewModels의 존재를 알게됐어요 두 가지의 차이점에 대해 알아봅시다! 🔍 왜 이렇게 처음보는게 늘 많은지 T_T 멀고도 험한... viewModels() 해당 ViewModel을 초기화하는 Component의 LifeCycle을 따름 activityViewModels() @MainThread public inline fun Fragment.activityViewModels( noinline extrasProducer: (() -> CreationExtras)? = null, noinline factoryProducer: (() -> Factory)? = null ): Lazy = createVi..

📱 Android 2023.07.27

[Android] DataBinding BindingAdapter 사용하기

데이터 바인딩을 사용할 때 view의 attributes를 커스텀으로 추가해 사용할 때 즉, 쉽게 말하자면 xml에서 원하는 속성을 만들어서 사용하는 방식입니다 어떤 속성을 만드는지에 따라서 무궁무진하게 사용됩니다 :) 기본 형태 @BindingAdapter("xml에서 사용할 명칭") fun setAB(속성과 연결된 뷰 타입, T) { // ... } 실제 코드를 보자면 ImageView에 적용하는 예시니, 첫번째 param은 ImageView이고 함수 안에서 사용될 데이터는 String 값임을 알 수 있습니다 @BindingAdapter("setImgUrl") fun setImgUrl(view: ImageView, url: String) { Glide.with(view).load(url).into(v..

📱 Android 2023.07.27

[Android] Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules kotlin-stdlib-1.8.20 (org.jetbrains.kotlin:kotlin-stdlib:1.8.20) and kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)

🔐 어딘가에서 충돌이나서 생기는 거 같은데, 공식적인 해결방법은 없는 것 같고 구글링하다가 제대로 동작하는 부분을 찾았습니다 :) 하나하나 라이브러리 비교하기에는 무리가 있을 거 같아서 ㅠㅠ 아래의 방법을 따라했습니다 🔑 build.gradle(app)에 아래의 소스를 추가합니다 constraints { implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0") { because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib") } implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0") { because("kotlin-stdlib-jdk8 is n..

📱 Android 2023.07.22

[Android] Livedata setValue, postvalue

Livedata를 쓰면서 setValue, postValue의 차이점을 명확히 모르고 있었다 둘 다 값을 적용하지만 무슨 차이가 있을까? setValue void setValue (T value) 메인쓰레드에서 호출되는 함수, 메인쓰레드에서 값을 바로 변경한다 공식문서에 보면, setValue에 아래와 같이 설명되어있다 If you need set a value from a background thread, you can use postValue(Object) setValue는 메인쓰레드에서 호출되기 때문에, 백그라운드에서 값을 설정하려면 postValue를 사용해야한다 postValue 백그라운드에서 값을 설정하려면 postValue를 사용한다 안드로이드 스튜디오에서 postValue를 눌러보면 아래와..

📱 Android 2023.06.23

[Jetpack] Navigation Component #2 args 전달하기

args 전달하는 건 아주 간단해요 왜냐하면 우리가 1탄에서 사용했던 action.arguments가 Bundle이기 때문이져 :) bundle이라면, put / get을 사용하면 되겠죠 ! nav_graph.xml에서 Design 탭을 누르면 Arguments가 있어요 Add Argument를 누르면 type에서 원시타입 말고도 custom 타입도 가능합니다 :) 진짜 편리한거같아여 Argument를 받을 Fragment에 선언해줍니다 ! testArgs로 Argument를 생성하면 nav_graph.xml에 자동으로 선언되어 있습니다 자 이걸 소스에서 연결해봅시다 MainFragment -> GridFragment로 전달하는 과정입니다 1️⃣ args를 전달하는 부분 (MainFragment) nav..

📱 Android 2023.05.01

[Jetpack] Navigation Component #1 기본 뼈대 만들기

Jetpack에서 Navigation을 한번 사용해보겠습니다 Navigation에 관해선 아래의 공식문서를 참고했어요 https://developer.android.com/guide/navigation 탐색 | Android 개발자 | Android Developers Android Jetpack의 탐색 구성요소를 사용하여 앱에서 탐색 구현 developer.android.com Navigation에는 3가지 Key part가 있습니다 1️⃣ Navigation Graph 모든 네비게이션 관련 정보가 한곳에 모여 있는 XML 리소스 앱을 통해 이동할 수 있는 경로뿐만 아니라 앱 내의 모든 개별 콘텐츠 영역(목적지)가 포함됩니다 2️⃣ Nav Host Navigation graph로부터 목적지들을 표시하는..

📱 Android 2023.04.30

[Jetpack] LiveData와 ViewModel

Jetpack 라이브러리의 Architecture(안드로이드 앱의 아키텍처를 지원하는 데 필요한 기술들을 제공) 카테고리에 속해있는 ViewModel과 LiveData에 대해 간략히 정리해보겠습니다 :) LiveData : 생명주기를 인식하는 observer pattern을 구현하는 데이터 홀더 클래스 데이터 변경 시 UI에 알림을 보내고 Activity, Fragment등 구성요소의 lifecycle에 따라 관찰 가능 🔍 특징 - UI 업데이트에 사용되는 Data들을 쉽게 관리할 수 있다 - 생명주기를 인식해 Data Update를 알려준다 - 안전하게 관찰가능하도록 설계되어서 NPE 방지가 가능하다 - 구성요소 변경(화면 회전 등)의 이유로 Activity 재생성시 이전 상태 저장 ViewModel ..

📱 Android 2023.03.23

[Hilt] Hilt 익히기 #2 - Dagger 복습하기 (주요 Annotation)

앞전에서 Hilt는 Dagger를 기반으로 만들어진 DI 라이브러리임을 알 수 있었는데, 사실 Dagger도 초반에만 사용하고, 그 뒤로 안 써봐서 어노테이션이 정확히 기억나지 않아요 :( 그래서 주요 어노테이션들을 복습하는 시간을 가지고, Hilt 공식 문서를 보는 공부방식으로 정했어요 ! 까먹는거.. 저만 그런거 아니잖아요..? 아주 간단한 예제를 통해서 주요 Annotation을 다시 복습해보겠습니다 ✏️ 1. @Module, @Provides Component에 의존성을 제공하는 역할을 합니다 모듈 클래스를 만드는 방법은 @Module만 붙여주면 됩니다 그리고 그 안에 선언되는 메소드들에는 @Provides가 붙어요 :) 간단한 코드를 예시로 보자면, @Module class MainModule ..

📱 Android 2023.01.30

[Android] Clean Architecture

이전 포스팅에도 작성한 적이 있는데, 새로이 공부하면서 다시 정리해보도록 하겠습니다 ✏️ 왜냐하면 까먹었기 때문이죠 아마 내용이 비슷할거에요.. 그래도 한번 더 써보는걸로도 공부가 되니깐,,. 2022.05.29 - [📱 Android] - [Android] Clean Architecture in Android [Android] Clean Architecture in Android Clean Architecture 본격적인 디자인 패턴 공부에 앞서, clean Architecture에 대해 알아보겠습니다 Clean Architecture에 가장 중요한 부분은 UI와 Data를 분리함에 있습니다 관심사를 계층별로 분리 관심사란 단 kong-droid.com Clean Architecture ⭐️ 관심사 분..

📱 Android 2023.01.08