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中使用这种模式
- 使用Mockito,我如何用val接口字段声明监听Kotlin类?
- 在android中替代和快速替换findViewById
- 在多项目设置中ConfigurationsContainer为空
- 设置TargetSDK = 22但编译SDK = 26的优缺点是什么?
- java.lang.RuntimeException:将结果ResultInfo(who = null,request = 1888,result = 0,data = null)传递给activity
- 如何在回收视图中为自定义ViewHolder实现OnClickListener?
- JNI GetShortArrayElements失败,SIGSEGV SEGV_ACCERR
- 训练Android应用使用机器学习识别传感器模式
- Android咖啡无障碍检查失败