1

次のコード行を使用して、バックエンド サーバーからのデータをRecyclerViewusingに表示できますPagedListAdapter

movieViewModel = ViewModelProviders.of(this).get(MovieViewModel.class);
MovieAdapter adapter = new MovieAdapter(this);
movieViewModel.moviePagedList.observe(this, adapter::submitList);
recyclerView.setAdapter(adapter);

このメソッドを作成しました:

private void movieSearch(String searchText) {
    globalSearch = searchText;
    movieViewModel.replaceSubscription(this);
    movieViewModel = ViewModelProviders.of(this).get(MovieViewModel.class);
    MovieAdapter adapter = new MovieAdapter(this);
    movieViewModel.moviePagedList.observe(this, adapter::submitList);
    recyclerView.setAdapter(adapter);
}

検索結果を表示するために内部から呼び出されonQueryTextChange()ますが、何らかの理由で my のデータがRecyclerView更新されません。

これも私のMovieViewModelクラスです:

public class MovieViewModel extends ViewModel {
    LiveData<PagedList<ApiResponse.Movie>> moviePagedList;

    public MovieViewModel() {
        MovieDataSourceFactory movieDataSourceFactory = new MovieDataSourceFactory(search);
        PagedList.Config config = new PagedList.Config.Builder().setEnablePlaceholders(false).setPageSize(20).build();
        moviePagedList = new LivePagedListBuilder<>(movieDataSourceFactory, config).build();
    }

    void replaceSubscription(LifecycleOwner lifecycleOwner) {
        moviePagedList.removeObservers(lifecycleOwner);
    }
}

何かを検索するたびに、新鮮なデータを取得する必要があります。これを解決するには?

4

5 に答える 5

0

adapter.refresh() を呼び出します

swiperefresh.setOnRefreshListener {
  movieListAdapter.refresh()
  swiperefresh.isRefreshing = false
}

movieListAdapter は PagingDataAdapter を拡張する必要があることに注意してください

于 2020-11-09T19:20:16.577 に答える