मेरे पास एकाधिक व्यूहोल्डर हैं जो वर्टिकल रीसाइक्लर व्यू के अंदर अलग-अलग दृश्यों के रूप में काम करते हैं। मैं नए आर्किटेक्चर घटक ViewModel के साथ अभ्यास कर रहा हूं।पुनर्चक्रण दृश्य एडाप्टर के अंदर आर्किटेक्चर घटक ViewModel का उपयोग कैसे करें?
मेरे व्यूमोडेल के अंदर मेरे पास कुछ MutableLiveData सूचियां हैं जिन्हें मैं देखना चाहता हूं। लेकिन मैं कैसे गतिविधि लीक बिना
ViewModelProviders.of((AppCompatActivity)getActivity()).get(FilterViewModel.class)
और
mFilterViewModel.getCountries().observe(this, new Observer<ArrayList<TagModel>>() {
@Override
public void onChanged(@Nullable ArrayList<TagModel> tagModels) {
}
});
फोन या एडाप्टर के अंदर गतिविधि बचा सकता है।
मेरी ViewModel
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;
}
}
हाय। आप इसके बजाय एंड्रॉइड डेटा बाइंडिंग का उपयोग क्यों नहीं करना चाहते हैं? – JuliaKo
हाय @ जुलिआको, मेरे ऐप को एमवीवीएम में दोबारा करने का मेरा इरादा नहीं है। फिलहाल मैं एमवीपी का उपयोग करता हूं। मैं लाइफसाइकिल समस्याओं को हल करने, डेटा को पुनः लोड करने और अनावश्यक पर्यवेक्षकों को हल करने के लिए एमवीपी ढांचे के साथ व्यूमोडेल क्लास का उपयोग करना चाहता हूं। –
मुझे लगता है कि आपको बाध्यकारी एडाप्टर को कार्यान्वित करने की आवश्यकता है, और Google टीम डेटा बाध्यकारी जीवन चक्र को जागरूक करने जा रही है, लेकिन इसके लिए, जीवन चक्र को 1.0 स्थिर एपीआई हिट करने की आवश्यकता है। आप यहां खोले गए मुद्दे पर एक नज़र डाल सकते हैं: https://github.com/googlesamples/android-architecture-components/issues/34 – JuliaKo