Tôi có nhiều ViewHolders hoạt động như các khung nhìn được phân tách bên trong RecyclerView dọc. Tôi đang thực hành với Chế độ xem thành phần kiến trúc mới.cách sử dụng Cấu phần Kiến trúc ViewModel bên trong Bộ điều hợp RecyclerView?
bên trong ViewModel của tôi Tôi có một vài danh sách MutableLiveData mà tôi muốn quan sát. nhưng làm thế nào tôi có thể gọi
ViewModelProviders.of((AppCompatActivity)getActivity()).get(FilterViewModel.class)
và
mFilterViewModel.getCountries().observe(this, new Observer<ArrayList<TagModel>>() {
@Override
public void onChanged(@Nullable ArrayList<TagModel> tagModels) {
}
});
mà không bị rò rỉ hoạt động hoặc lưu hoạt động bên trong bộ chuyển đổi.
ViewModel của tôi
public class FilterViewModel extends ViewModel {
private final MutableLiveData<ArrayList<TagModel>> mCountries;
private final MutableLiveData<ArrayList<TagModel>> mSelectedCountryProvinceList;
private final MutableLiveData<ArrayList<TagModel>> mDistanceList;
public FilterViewModel(){
mCountries = new MutableLiveData<>();
mSelectedCountryProvinceList = new MutableLiveData<>();
mDistanceList = new MutableLiveData<>();
TagStore.getInstance().subscribe(new StoreObserver<TagSearchList>() {
@Override
public void update(TagSearchList object) {
mCountries.setValue(object.getCountries());
}
@Override
public void update(int id, TagSearchList object) {
if (id == 5){
TagStore.getInstance().unSubcribe(this);
update(object);
}
}
@Override
public void error(String error) {
}
}).get(5,"parent");
TagStore.getInstance().subscribe(new StoreObserver<TagSearchList>() {
@Override
public void update(TagSearchList object) {
mSelectedCountryProvinceList.setValue(object.toList());
}
@Override
public void update(int id, TagSearchList object) {
if (id == 6){
TagStore.getInstance().unSubcribe(this);
update(object);
}
}
@Override
public void error(String error) {
}
}).get(6,"parent");
TagStore.getInstance().subscribe(new StoreObserver<TagSearchList>() {
@Override
public void update(TagSearchList object) {
mDistanceList.setValue(object.toList());
}
@Override
public void update(int id, TagSearchList object) {
if (id == 51){
TagStore.getInstance().unSubcribe(this);
update(object);
}
}
@Override
public void error(String error) {
}
}).get(51,"parent");
}
public void selectCountry(final TagModel country){
TagStore.getInstance().subscribe(new StoreObserver<TagSearchList>() {
@Override
public void update(TagSearchList object) {
mSelectedCountryProvinceList.setValue(object.toList());
}
@Override
public void update(int id, TagSearchList object) {
if (id == country.getId()){
TagStore.getInstance().unSubcribe(this);
update(object);
}
}
@Override
public void error(String error) {
}
}).get(country.getId(),"parent");
}
public LiveData<ArrayList<TagModel>> getCountries(){
return mCountries;
}
public LiveData<ArrayList<TagModel>> getDistances(){
return mDistanceList;
}
public LiveData<ArrayList<TagModel>> getProvinces(){
return mSelectedCountryProvinceList;
}
}
Xin chào. Tại sao bạn không muốn sử dụng Android Data Binding để thay thế? – JuliaKo
Xin chào @ JuliaKo, đó không phải là ý định của tôi để cấu trúc lại ứng dụng của tôi thành MVVM. Tại thời điểm này tôi sử dụng MVP. tôi muốn sử dụng lớp ViewModel với khung MVP để giải quyết các vấn đề về vòng đời, tải lại dữ liệu và các Observables không cần thiết. –
Tôi nghĩ rằng những gì bạn cần là để thực hiện các bộ điều hợp ràng buộc, và nhóm google sẽ làm cho vòng đời liên kết dữ liệu nhận biết nhưng để điều đó xảy ra, vòng đời cần phải đạt tới 1,0 api ổn định. Bạn có thể xem xét vấn đề đã mở tại đây: https://github.com/googlesamples/android-architecture-components/issues/34 – JuliaKo