AndroidX 라이브러리에는 아키텍처 구성요소를 사용하여 강력하고 테스트와 유지관리가 쉬운 앱을 설계하는 데 사용하는 방법을 알아봅니다 데이터 결합 라이브러리는 아키텍처와 원활하게 작동합니다. 구성요소를 더욱 단순화하여 UI 개발에 도움이 됩니다 앱의 레이아웃 아키텍처 구성요소의 데이터에 결합하여 UI 컨트롤러의 수명 주기를 관리하고 데이터 변경사항을 UI에 알립니다.
이 페이지에서는 아키텍처 구성요소를 앱에 통합하여 데이터 결합 라이브러리를 최대한 활용할 수 있습니다
LiveData를 사용하여 UI에 데이터 변경 알림
LiveData
객체를 다음과 같이 사용할 수 있습니다.
데이터 결합 소스에서
데이터입니다. 이 아키텍처 구성요소에 관한 자세한 내용은 LiveData
개요를 참조하세요.
객체를 구현하는
Observable
: 예:
Observable(관측 가능한)
필드: LiveData
객체가 데이터를 구독하는 관찰자의 수명 주기를 알고 있음
있습니다. 이러한 지식을 바탕으로 다음과 같은 많은 이점을 얻을 수 있습니다. 자세한 내용은
장점
LiveData를 사용하는 방법을 알아보세요.
Android 스튜디오 버전 3.1 이상에서는 식별 가능한 필드를 대체할 수 있습니다.
데이터 결합 코드에 LiveData
객체를 사용하면 됩니다.
결합 클래스와 함께 LiveData
객체를 사용하려면
수명 주기 소유자가 LiveData
객체의 범위를 정의해야 합니다. 다음
예는 활동을 결합 클래스 뒤의 수명 주기 소유자로 지정함
다음과 같이 인스턴스화되었습니다.
Kotlin
class ViewModelActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { // Inflate view and obtain an instance of the binding class. val binding: UserBinding = DataBindingUtil.setContentView(this, R.layout.user) // Specify the current activity as the lifecycle owner. binding.setLifecycleOwner(this) } }
자바
class ViewModelActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { // Inflate view and obtain an instance of the binding class. UserBinding binding = DataBindingUtil.setContentView(this, R.layout.user); // Specify the current activity as the lifecycle owner. binding.setLifecycleOwner(this); } }
ViewModel
를 사용할 수 있습니다.
구성요소를 사용하여 데이터를 레이아웃에 결합합니다. ViewModel
구성요소에서
LiveData
객체를 사용하여 데이터를 변환하거나 여러 데이터를 병합할 수 있습니다.
소스입니다 다음 예는 ViewModel
의 데이터를 변환하는 방법을 보여줍니다.
Kotlin
class ScheduleViewModel : ViewModel() { val userName: LiveDatainit { val result = Repository.userName userName = Transformations.map(result) { result -> result.value } } }
자바
class ScheduleViewModel extends ViewModel { LiveDatausername; public ScheduleViewModel() { String result = Repository.userName; userName = Transformations.map(result, result -> result.value); } }
ViewModel을 사용하여 UI 관련 데이터 관리
데이터 결합 라이브러리는
ViewModel
구성요소. ViewModel
레이아웃에서 관찰하고 변경사항에 반응하는 데이터를 노출합니다. 사용
데이터 결합 라이브러리가 있는 ViewModel
구성요소를 사용하면 UI 로직 이동 가능
구성요소를 쉽게 테스트할 수 있습니다. 데이터
뷰가 데이터에서 결합 및 결합 해제되도록 보장하는 결합 라이브러리
사용할 수 있습니다 나머지 작업은 대부분
올바른 데이터를 노출하고 있습니다. 이 아키텍처에 대한 자세한 내용은
구성요소에 관한 자세한 내용은 ViewModel 참고
개요를 참조하세요.
데이터 결합 라이브러리와 함께 ViewModel
구성요소를 사용하려면 다음을 실행해야 합니다.
구성요소를 인스턴스화합니다. 이 구성요소는
ViewModel
클래스에서는
결합 클래스의 인스턴스를 재정의하고 ViewModel
구성요소를
속성 값을 정의합니다. 다음 예는
구성요소를 사용할 수 있습니다.
Kotlin
class ViewModelActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { // Obtain the ViewModel component. val userModel: UserModel by viewModels() // Inflate view and obtain an instance of the binding class. val binding: UserBinding = DataBindingUtil.setContentView(this, R.layout.user) // Assign the component to a property in the binding class. binding.viewmodel = userModel } }
자바
class ViewModelActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { // Obtain the ViewModel component. UserModel userModel = new ViewModelProvider(this).get(UserModel.class); // Inflate view and obtain an instance of the binding class. UserBinding binding = DataBindingUtil.setContentView(this, R.layout.user); // Assign the component to a property in the binding class. binding.viewmodel = userModel; } }
레이아웃에서 ViewModel
구성요소의 속성과 메서드를 할당합니다.
다음과 같이 결합 표현식을 사용하여 상응하는 뷰에 추가합니다.
예:
<CheckBox
android:id="@+id/rememberMeCheckBox"
android:checked="@{viewmodel.rememberMe}"
android:onCheckedChanged="@{() -> viewmodel.rememberMeChanged()}" />
결합 어댑터를 더 세밀하게 제어하기 위해 관찰 가능한 ViewModel 사용
ViewModel
를 사용할 수 있습니다.
구성요소를 구현하는
Observable
인터페이스
다른 사용자에게 알리기 위해
앱 구성 요소에 대해 자세히 알아볼 수 있습니다.
LiveData
객체를 반환합니다.
경우에 따라서는 특정 광고 단위를
Observable
를 구현하는 ViewModel
구성요소
수명 주기가 손실되더라도 LiveData
객체 사용에 대한 인터페이스
LiveData
의 관리 기능 ViewModel
구성요소 사용
구현 Observable
를 사용하면 앱의 결합 어댑터를 더 세밀하게
있습니다. 예를 들어 이 패턴을 사용하면
데이터가 변경될 때 또한 커스텀 메서드를 지정하여
특성 값을 입력할 수도 있습니다.
관찰 가능한 ViewModel
구성요소를 구현하려면 다음과 같은 클래스를 만들어야 합니다.
ViewModel
클래스에서 상속되고 Observable
를 구현합니다.
인터페이스에 추가되었습니다. 관찰자가 구독하거나 알림 대상이 될 때 맞춤 로직을 제공할 수 있습니다.
알림을 수신 거부하려면
addOnPropertyChangedCallback()
드림
및
removeOnPropertyChangedCallback()
메서드를 참조하세요. 또한 속성이 변경될 때 실행되는 커스텀 로직을
notifyPropertyChanged()
드림
메서드를 사용하여 축소하도록 요청합니다. 다음 코드 예는 observable
ViewModel
:
Kotlin
/** * A ViewModel that is also an Observable, * to be used with the Data Binding Library. */ open class ObservableViewModel : ViewModel(), Observable { private val callbacks: PropertyChangeRegistry = PropertyChangeRegistry() override fun addOnPropertyChangedCallback( callback: Observable.OnPropertyChangedCallback) { callbacks.add(callback) } override fun removeOnPropertyChangedCallback( callback: Observable.OnPropertyChangedCallback) { callbacks.remove(callback) } /** * Notifies observers that all properties of this instance have changed. */ fun notifyChange() { callbacks.notifyCallbacks(this, 0, null) } /** * Notifies observers that a specific property has changed. The getter for the * property that changes must be marked with the @Bindable annotation to * generate a field in the BR class to be used as the fieldId parameter. * * @param fieldId The generated BR id for the Bindable field. */ fun notifyPropertyChanged(fieldId: Int) { callbacks.notifyCallbacks(this, fieldId, null) } }
Java
/** * A ViewModel that is also an Observable, * to be used with the Data Binding Library. */ class ObservableViewModel extends ViewModel implements Observable { private PropertyChangeRegistry callbacks = new PropertyChangeRegistry(); @Override protected void addOnPropertyChangedCallback( Observable.OnPropertyChangedCallback callback) { callbacks.add(callback); } @Override protected void removeOnPropertyChangedCallback( Observable.OnPropertyChangedCallback callback) { callbacks.remove(callback); } /** * Notifies observers that all properties of this instance have changed. */ void notifyChange() { callbacks.notifyCallbacks(this, 0, null); } /** * Notifies observers that a specific property has changed. The getter for the * property that changes must be marked with the @Bindable annotation to * generate a field in the BR class to be used as the fieldId parameter. * * @param fieldId The generated BR id for the Bindable field. */ void notifyPropertyChanged(int fieldId) { callbacks.notifyCallbacks(this, fieldId, null); } }
추가 리소스
데이터 결합에 관한 자세한 내용은 다음을 참고하세요. 추가 리소스를 확인해 보세요.
- <ph type="x-smartling-placeholder"></ph> Android의 데이터 결합 Codelab
추천 서비스
- 참고: JavaScript가 사용 중지되어 있으면 링크 텍스트가 표시됩니다.
- 관측 가능한 데이터 객체로 작업
- 페이징 데이터 로드 및 표시
- 수명 주기 인식 구성요소로 Kotlin 코루틴 사용