Android架构组件LiveData

我正在尝试使用架构组件来实现一个简单的应用程序。 我可以使用Retrofit2从RestApi服务获取信息。 我可以在各自的Recyclerview中显示信息,当我旋转手机时,一切都按照原样进行。 现在我想过滤一个新types的对象(通过字符串)

有人可以用ViewModel指导我一点,我不知道最好的做法是什么…我正在使用MVVM …

这是我的ViewModel:

public class ListItemViewModel extends ViewModel { private MediatorLiveData mList; private MeliRepository meliRepository; /* Empty Contructor. * To have a ViewModel class with non-empty constructor, * I have to create a Factory class which would create instance of you ViewModel and * that Factory class has to implement ViewModelProvider.Factory interface. */ public ListItemViewModel(){ meliRepository = new MeliRepository(); } public LiveData getItemList(String query){ if(mList == null){ mList = new MediatorLiveData(); LoadItems(query); } } private void LoadItems(String query){ String queryToSearch = TextUtils.isEmpty(query) ? "IPOD" : query; mList.addSource( meliRepository.getItemsByQuery(queryToSearch), list -> mList.setValue(list) ); } } 

UPDATE

我解决了这个使用从生命周期库转换包… 在这里输入链接描述

 public class ListItemViewModel extends ViewModel { private final MutableLiveData mQuery = new MutableLiveData(); private MeliRepository meliRepository; private LiveData mList = Transformations.switchMap(mQuery, text -> { return meliRepository.getItemsByQuery(text); }); public ListItemViewModel(MeliRepository repository){ meliRepository = repository; } public LiveData getItemList(String query){ return mList; } } 

@约翰这是我的解决方案。 我正在使用生命周期库,解决方案比我想象的要容易。 谢谢!

我更熟悉Kotlin这样做,但是你应该可以很容易地把它翻译成Java(或者现在是开始使用Kotlin的好时机:))…适应类似的模式我在这里我相信你’做类似的事情:

 val query: MutableLiveData = MutableLiveData() val mList = MediatorLiveData>().apply { this.addSource(query) { this.value = meliRepository.getItemsByQuery(query) } } fun setQuery(q: String) { query.value = q } 

我在下面的https://github.com/joreilly/galway-bus-android/blob/master/app/src/main/java/com/surrus/galwaybus/ui/viewmodel/BusStopsViewModel.kt中使用这种模式