You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Fragment视图未随SearchView搜索数据更新

问题解决:SearchView搜索后RecyclerView不更新

问题根源

你已经通过Log确认搜索接口返回了正确的数据,但RecyclerView未更新,核心原因是获取到搜索结果后,没有调用Adapter的setData方法将新数据传递给列表。

具体修改

修改TripHome中的getItemsFromDb方法,在数据回调中添加更新Adapter的逻辑,同时将Observer的生命周期所有者替换为viewLifecycleOwner(更安全,避免Fragment销毁后内存泄漏):

private fun getItemsFromDb(searchText: String) {
    var searchText = searchText
    searchText = "%$searchText%"

    mTripViewModel.searchTrip(query = searchText).observe(viewLifecycleOwner, Observer { trip->
        trip?.let {
            Log.e("List = ", trip.toString())
            // 新增:将搜索结果传递给Adapter更新视图
            adapter.setData(it)
        }
    })
}

额外优化建议(可选)

如果你的TripViewModel中searchTrip方法每次调用都会创建新的LiveData实例,建议使用Transformations.switchMap来实现搜索结果的自动响应,避免重复创建Observer:

// 在TripViewModel中
private val searchQuery = MutableLiveData<String>()
val searchResults: LiveData<List<TripModel>> = Transformations.switchMap(searchQuery) { query ->
    repository.searchTrip(query) // 这里替换为你的搜索数据源逻辑
}

fun setSearchQuery(query: String) {
    searchQuery.value = "%$query%"
}

然后在Fragment中只需要观察一次searchResults:

// 在onCreateView中
mTripViewModel.searchResults.observe(viewLifecycleOwner, Observer {
    adapter.setData(it)
})

// 修改getItemsFromDb
private fun getItemsFromDb(searchText: String) {
    mTripViewModel.setSearchQuery(searchText)
}

验证

修改完成后,再次输入搜索文本,Log显示正确数据的同时,RecyclerView会自动刷新展示过滤后的内容。

内容的提问来源于stack exchange,提问作者VDTVN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:21:52