首页 > 解决方案 > 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 时,我想发送一个查询。

标签: androidmvvmandroid-recyclerviewpaging

解决方案


您应该将您的替换EditTextSearchView并应用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 创建了一个应用程序,这也是我为获取电影列表所做的。

快乐编码!


推荐阅读