android/Jetpack (9) 썸네일형 리스트형 Jetpack Navigation NavHostFragment Jetpack Navigation 을 사용하여 Fragment 간에 전환하면 NavController 가 적절한 Navigator(예: FragmentNavigator) 를 선택하여 직접 FragmentManager 를 사용하여 FragmentTransaction 을 생성하고 각 Destination(NavBackStackEntry) 을 BackStack 에 push,pop 을 하기 때문에 개발자 입장에서는 굉장히 편리하게 화면 전환을 구현할 수 있습니다. Chapter 01 Navigation Graph 의 각 Destination 을 호스팅하는 NavHostFragment 일반적으로 Jetpack Navigation 을 통해 Single Activity 에 여러 Fragment 를 사용할 때는 act.. 6. ViewModelStore 와 ViewModelStoreOwner ① ViewModelStore 은 ViewModel 객체를 저장하기 위한 클래스입니다. 내부에 ViewModel 을 저장하기 위해 HashMap 을 가지고 있으며, put(ViewModelStore 에 ViewModel 저장), get(ViewModelStore 에 저장된 ViewModel 반환), clear(ViewModelStore 에 저장된 ViewModel 객체 정리) 메서드를 제공합니다. ② ViewModelStore 객체는 ViewModelStoreOwner 인터페이스 구현 객체에서 관리합니다. Activity(ComponentActivity class) 또는 Fragment(Fragment class) 는 ViewModelStoreOwner 인터페이스를 구현한 ViewModelStoreOwn.. Room DB 와 RoomTrackingLiveData Room 의 구성요소인 Dao 에서 getAll() 과 같은 메서드에서는 리턴타입을 LiveData 형태로하면 연결된 테이블의 데이터가 변경되면 옵저버들에게 통지가 가도록 만들 수 있습니다. 그런데 생각을 해보다 좀 이상한 부분이 있었습니다. LiveData 는 관찰 가능한 데이터 홀더 클래스로 값이 변경될 때 setValue 또는 postValue 메서드를 호출하여 옵저버들의 onChanged 메서드를 호출하여 통지를 해주는 방식으로 동작합니다. 그렇게 하려면 데이터소스에서 데이터를 읽어온 후 LiveData 에 값을 설정하는 메서드에서 setValue 를 호출해줘야지만 옵저버들에게 통지가 가게됩니다. 즉 아래와 같이 Activity 또는 Fragment 에서 먼저 LiveData 옵저버를 등록한 후 .. 5-1. Jetpack Navigation의 구성요소 [1]. Jetpack Navigation 이란? Jetpack Navigation 은 앱 내의 여러 컨텐츠에 들어갔다 나올 수 있게 하는 상호작용을 구현하도록 도와주는 라이브러리 이다. [2]. Navigation 구성요소 1. Navigation Graph => 모든 Navigation 관련 정보가 모여있는 XML 파일이다. XML 파일 내에는 목적지 과 이용 가능한 경로 등이 포함되어 있다 2. NavHost => Navigation Graph 를 호스팅하기 위한 빈 Container 이다. app:navGraph="@navigation/nav_graph" app:defaultNavHost="true" android:name="androidx.navigation.fragment.NavHostFrag.. 4-2 단방향 데이터 바인딩, 양방향 데이터 바인딩 *개인적으로 분석한 내용이므로 틀린 내용이 있을 수 있습니다. 틀린 내용을 댓글로 남겨주시면 수정하도록 하겠습니다! [1]. 단방향 데이터 바인딩 vs 양방향 데이터 바인딩 1. 단방향 데이터 바인딩: 예를들어 ViewModel 내 특정 프로퍼티의 값이 변화함에 따라 연결된 View 가 변한다. (data 변화 -> view 변화) 2. 양방향 데이터 바인딩: 단방향 데이터바인딩 기능에 더해 사용자의 입력을 받을 수 있는 View(대표적으로 EditText)에 입력이 들어오거나 이미 입력된 값이 변화하면 연결된 프로퍼티의 값을 변화시킬 수 있다. [2]. 양방향 데이터 바인딩 표현식을 사용했을 때의 코드 분석 //EditText 에 입력된 값이 변화할 때 마다 해당 리스너의 onChage 메서드가 호출된.. 4-1 DataBinding *개인적으로 분석한 내용이므로 틀린 내용이 있을 수 있습니다. 틀린 내용을 댓글로 남겨주시면 수정하도록 하겠습니다! DataBinding 라이브러리는 UI Component 들이 데이터 소스에 Programmatically 한 방식이 아닌 선언적 방식을 통해 결합하도록 지원하는 Jetpack 라이브러리이다. [1]. DataBinding 사용방법 *DataBinding 을 사용하는 방법은 수많은 블로그에 이미 자세히 기록되어 있기 때문에 간략히 작성하고 넘어간다. 1. gradle 파일에서 DataBinding 활성화 buildFeatures { dataBinding true } 2. layout 파일을 DataBinding 사용 형식으로 변경 내의 태그를 선언하면 DataBinding 라이브러리에 의해.. 3. LiveData *개인적으로 분석한 내용이므로 틀린 내용이 있을 수 있습니다. 틀린 내용을 댓글로 남겨주시면 수정하도록 하겠습니다! [1]. LiveData 의존성 선언 dependencies { ... // LiveData implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.6.0-alpha02" ... } [2]. LiveData 사용방법 class MainViewModel : ViewModel() { private var _flag = MutableLiveData() /* ViewModel 클래스 외부에 노출될 LiveData 프로퍼티는 변경이 불가능한 LiveData 타입을 사용한다. */ val flag: LiveData get() = _flag /* Li.. 2. ViewModel 과 ViewModelFactory *개인적으로 분석한 내용이므로 틀린 내용이 있을 수 있습니다. 틀린 내용을 댓글로 남겨주시면 수정하도록 하겠습니다! [1]. ViewModel 의 개념 1. 안드로이드 Activity 또는 Fragment 는 각자의 독립된 생명주기를 가지고 있다. 예를들어 B Activity → B Activity 로 전환된다면 A Activity 는 onStop callback 메서드가 실행되며 B Activity 는 onCreate callback 메서드가 호출되게 되어 화면에는 b Activity 가 출력되게 된다. 만약 사용자가 스마트폰을 가로에서 세로로 또는 세로에서 가로로 전환하는 경우등의 기기 구성 변경이 발생하게 되면 안드로이드 시스템은 변경된 기기 구성에 맞춰서 기존의 Activity 는 파괴하고 Act.. 1. ViewBinding *개인적으로 분석한 내용이므로 틀린 내용이 있을 수 있습니다. 틀린 내용을 댓글로 남겨주시면 수정하도록 하겠습니다! [1]. ViewBinding 활성화 1. ViewBinding 을 활성화하면 Binding class 가 자동으로 생성되며, findViewById 를 사용하지 않고 Activity 또는 Fragment 에서 View 에 접근할 수 있다. android { ... //ViewBinding 활성화 buildFeatures { viewBinding true } } [2]. Binding class 분석 1. Activity 또는 Fragment 에서 binding 객체를 생성하기 위해 Binding class 의 inflate 메서드를 호출하면 Binding class 에 연결된 xml 파일.. 이전 1 다음