android - Android分页库,无尽的RecyclerView,改造
问题描述
我有一个 EditText 和一个 RecyclerView。我想观察 EditText 并从 TMDB API 获取数据到无尽的 RecyclerView。我可以使用 Retrofit 和 Paging 库从 API 获取数据到无尽的 Recyclerview。但我只能从 viewModel 向 API 发送查询,我想观察 EditText 并将该查询发送到 API。我怎样才能做到这一点?视图模型:
class AddViewModel(private val movieRepository : MoviePagedListRepository) : ViewModel() {
val isError = MutableLiveData<Boolean>()
val isLoading = MutableLiveData<Boolean>()
private val compositeDisposable = CompositeDisposable()
val movieSeriesETContent = MutableLiveData<String>()
val moviePagedList : LiveData<PagedList<Movie>> by lazy {
movieRepository.fetchLiveMoviePagedList("break",compositeDisposable)
}
override fun onCleared() {
super.onCleared()
compositeDisposable.dispose()
}
}
分段:
vm.movieSeriesETContent.observe(viewLifecycleOwner, Observer {
Log.d("Murad",it)
})
vm.moviePagedList.observe(viewLifecycleOwner, Observer {
adapter.submitList(it)
})
您可以在 ViewModel 类中看到请求“中断”,但是当我观察我现在放置 Log.d("Murad",it) 的 EditText 时,我想发送一个查询。
解决方案
您应该将您的替换EditText
为SearchView
并应用OnQueryTextListener
。这样就不需要观察者对文本更改有任何要求。
searchView.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
//you can show a progress bar here as well
progressBar.setIndeterminate(true);
// here you can call your ViewModel's searchQueryMethod()
return true;
}
});
在您的观察者中,您只需要适配器上的更改数据集。我确实也使用 TMDB API 创建了一个应用程序,这也是我为获取电影列表所做的。
快乐编码!
推荐阅读
- python - 语音调度程序 python3 语音 SSIPClient 错误
- javascript - 在javascript中获取触发器的ID
- macos - 如何从 MacOS Dock VSCODE 中删除打开的文件夹
- angular - 在Angular中单击按钮时从数组中删除元素
- google-oauth - NEST 保护设备访问 fhem
- php - Symfony 的 JsonResponse 输出给出了空对象,尽管 print_r 显示了内容
- php - 更改 PHP 序列化数据中所有唯一键的值
- python - Pandas json_normalize 然后选择列与创建字典然后应用 json_normalize
- html - 无法在视频上对齐文本
- c# - 排序列表,除了一个带有 LINQ 的条目,排在最后