[Android/Java] Jetpack LiveData (Jetpack ViewModel MVVM+Repository 패턴)
8433 단어 안드로이드JetpackAndroidStudio자바
여기에서는 MutableLiveData를 Repository로 가지고 단순한 데이터의 Model을 다루는 것만으로
간단한 구성으로 일련의 흐름을 설명합니다.
다음 기사의 프로젝트 기반에 대한 설명입니다.
Android Developer의 Jetpack LiveData/MVVM+Repository 패턴에 대한 설명은 다음과 같습니다.
Layout 준비
여기에서는 ViewBinding을 사용하여 구현합니다.
ViewBinding을 설정하는 방법을 알고 싶다면 아래를 참조하십시오.
MainFragment 템플릿의 TextView는 id가 지정되지 않았기 때문에
여기서 textView를 지정합니다.

데이터 모델 만들기
여기에서는 단순한 String Name만을 가지는 UserModel을 준비합니다.
UserModel.java
public class UserModel {
public String Name;
}
리포지토리 만들기
여기에서는 UserModel을 다루는 MutableLiveData와 그 getter와 Name을 설정하는 메소드를 준비합니다.
※ 데이터를 갱신하기 위해 MutableLiveData를 사용합니다.
setValue()/postValue()의 차이를 자세히 알고 싶은 분은 다른 분의 기사에서 몇 가지 설명이 있으므로 찾아보세요
MainRepository.java
public class MainRepository{
final MutableLiveData<UserModel> user = new MutableLiveData<>();
public MutableLiveData<UserModel> getUser() {
return user;
}
public void setName(String name) {
UserModel userModel = user.getValue();
if (userModel == null) {
Log.d("MainRepository", "user = null");
userModel = new UserModel();
}
userModel.Name = name;
// setValue()はメインスレッドから呼び出す必要があります
//user.setValue(userModel);
user.postValue(userModel);
}
}
ViewModel 구현
Repository 인스턴스 생성
Repository 메서드를 호출하는 메서드를 제공합니다.
MainViewModel.java
public class MainViewModel extends ViewModel {
// TODO: Implement the ViewModel
final MainRepository repository = new MainRepository();
public MutableLiveData<UserModel> getUser() {
return repository.getUser();
}
public void setName(String name) {
repository.setName(name);
}
}
Fragment 구현
Fragment를 새로 만들 때 자동으로 생성된 코드에 ViewModel 처리를 추가합니다.
Name에 값을 설정하면 observe의 onChanged()가 호출되고 TextView의 내용이 다시 작성됩니다.
MainFragment.java
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mViewModel = new ViewModelProvider(this).get(MainViewModel.class);
// setを実行するとobserveのonChanged()が呼び出されます
mViewModel.setName("test");
mViewModel.getUser().observe(getViewLifecycleOwner(), new Observer<UserModel>() {
@Override
public void onChanged(UserModel user) {
Log.d("MainFragment", user.Name);
binding.textView.setText(user.Name);
// getValue()で値の取得もできます
Log.d("MainFragment", "getValue: " + mViewModel.getUser().getValue().Name);
}
});
}
Reference
이 문제에 관하여([Android/Java] Jetpack LiveData (Jetpack ViewModel MVVM+Repository 패턴)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/smurata_pvt/items/a2fcc114a7b9b6614caa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)