我有一个 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 类中看到请求“break”,但我想在观察现在放置 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 创建了一个 app,这也是我获取电影列表的方法。
快乐编码!