Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- a
- designPattern
- Kotlin
- Abstract Factory
- 추상팩토리패턴
- Design Pattern
- builderPattern
- PrototypePattern
- Observer Pattern
- 추상 팩토리
- F
- 프로토타입 패턴
- 디자인패턴
- Functional Programming
- Singleton
- 빌터패턴
- 코틀린
- ㅋㅁ
- r
- 함수형프로그래밍
- 팩토리 메소드
- El
- 디자인패턴 #
- 싱글톤
- 옵저버 패턴
- factory method
- ㅓ
Archives
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
DataBinding과 LiveData 본문
databinding의 가장 중요한 목적은 LiveData(Observable)을 이용하여 MVP 패턴에서 View와 Presenter 간의 높은 의존성을 약하게 만들어야 되었다.
또한 안드로이드 구성요소의 생명주기를 인식할 수 있는 LiveData를 이용한다면 생명주기에 대한 수동 처리 없이 데이터 변경에 따른 UI를 변경을 반응형으로 프로그래밍할 수 있다.
*안드로이드 스튜디오 3.1 이상 버전부터는 Observable 필드의 사용보단 LiveData의 사용을 데이터 바인딩에서 권장된다.
LiveData와 Binding클래스를 같이 사용하려면 바인딩 클래스에 LifecycleOwner를 명시하여 생명주기를 인식하고 생명주기를 인식하고 이에 따라 LiveData가 트리거 될 수 있도록 해야 된다.
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private UserViewModel mUserViewModel;
private ActivityMainBinding mBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mUserViewModel = new ViewModelProvider(this,
ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication()))
.get(UserViewModel.class);
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
mBinding.setViewModel(mUserViewModel);
mBinding.setLifecycleOwner(this);
.
.
.
}
LiveData를 사용하면서 Two-way dataBinding 사용하기
setter 프로퍼티 접근자를 통해서 양방향 데이터 바인딩의 구현과 LiveData의 사용을 동시에 할 수 있다.
setter생성 시 주의할 점
1. 메서드의 이름과 바인딩 표현식에서 참조하는 멤버의 이름이 일치해야 된다.
2. 메서드의 매개변수 타입이 LiveData의 제네릭 타입과 일치해야 된다.
예시)
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding mBinding;
private UserViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
viewModel = new ViewModelProvider(this,
ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication()))
.get(UserViewModel.class);
mBinding.setLifecycleOwner(this);
mBinding.setViewModel(viewModel);
}
}
public class UserViewModel extends AndroidViewModel {
public UserViewModel(@NonNull Application application) {
super(application);
}
private MutableLiveData<String> name = new MutableLiveData<>();
public MutableLiveData<String> getName() {
return name;
}
public void setName(MutableLiveData<String> name) {
this.name = name;
}
}
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<variable
name="viewModel"
type="com.professionalandroid.apps.databindingandlivedata.UserViewModel" />
</data>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.name}"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@={viewModel.name}"
/>
</LinearLayout>
</layout>
'Android Jetpack Architecture > LiveData' 카테고리의 다른 글
LiveData( MediatorLiveData ) (0) | 2020.08.18 |
---|---|
LiveData 변환( Transformation class ) (0) | 2020.08.17 |
LiveData 사용 하기 (0) | 2020.08.15 |
LiveData 개요와 이점 (0) | 2020.08.15 |