【发布时间】:2020-11-26 17:54:35
【问题描述】:
我有一个 ViewModel,它有一个类 Course 的数组列表的 MutableLiveData
private var coursesList: MutableLiveData<ArrayList<Course>> = MutableLiveData()
这个课程列表充满了从 API 获得的数据(通过改造):coursesList.postValue(response.body())
现在,用户可以按课程名称搜索课程。我的搜索功能是遍历 courseList 的元素并检查其名称是否与用户键入的内容相同。它返回一个数组列表,其中包含以键入的名称开头的课程(此列表稍后发送到一个片段,该片段将其传递给适配器以显示在回收器视图中):
fun getCoursesList(): MutableLiveData<ArrayList<Course>> {
return coursesList
}
fun searchCourses(searchString: String): ArrayList<Course> {
val resultsList: ArrayList<Course> = ArrayList()
if (getCoursesList().value == null) return resultsList
if (getCoursesList().value!!.size > 0) {
for (course in getCoursesList().value!!.iterator()) {
if (course.name.toLowerCase(Locale.ROOT).startsWith(searchString)) {
resultsList.add(course)
}
}
}
resultsList.sortBy { it.price }
return resultsList
}
此功能有效,除了我的导师之外,其他所有人都要求我使用 LiveData 进行搜索,但没有提供任何其他提示。
所以我的问题是如何使用 LiveData 进行搜索?我试图寻找答案,我看到一些使用 LiveDataTransformations.switchMap 但他们都在使用 RoomDAO,我无法将其调整为我拥有的代码。
任何帮助将不胜感激。提前致谢。
【问题讨论】:
标签: android kotlin viewmodel android-livedata mutablelivedata