Я сделал функцию поиска фильмов с поиском. Когда я выполняю первый поиск, то появляются данные или список, но когда я хочу выполнить поиск снова с новым поисковым словом, а затем отправляю, следующие данные или список не отображаются, а отображаются только предыдущие данные. нет даже реакции на поиск следующих данных. когда я выхожу и возвращаюсь к фрагменту, поиск продолжается, как и раньше, есть ли решение для этого? спасибо
MovieSearchFragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_search_movie, container, false);
recyclerView = view.findViewById(R.id.recyclerView);
searchView = view.findViewById(R.id.searchView);
searchView.setOnQueryTextListener(this);
setupRecyclerView();
return view;
}
private void loadMovie(String search) {
search = searchView.getQuery().toString();
SearchMovieViewModel viewModel = ViewModelProviders.of(Objects.requireNonNull(getActivity())).get(SearchMovieViewModel.class);
viewModel.init(search);
viewModel.getSeacrhMovie().observe(this, new Observer<MovieResponse>() {
@Override
public void onChanged(MovieResponse movieResponse) {
if (movieResponse != null) {
List<Movie> movies = movieResponse.getResults();
searchMovieList.addAll(movies);
adapter.notifyDataSetChanged();
showLoading(false);
} else {
showLoading(false);
showError();
}
}
});
}
@Override
public boolean onQueryTextSubmit(String query) {
showLoading(true);
loadMovie(query);
return false;
}
@Override
public boolean onQueryTextChange(String s) {
return false;
}
private void setupRecyclerView() {
if (adapter == null) {
adapter = new MovieAdapter(getActivity(), searchMovieList);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setAdapter(adapter);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setNestedScrollingEnabled(true);
}
}
Viewmodel
public class SearchMovieViewModel extends ViewModel {
private MutableLiveData<MovieResponse> mutableLiveData;
public void init(String movieTitle) {
if (mutableLiveData != null) {
return;
}
Repository repository = Repository.getInstance();
mutableLiveData = repository.getSearchMovie(BuildConfig.API_KEY, movieTitle);
}
public MutableLiveData<MovieResponse> getSeacrhMovie() {
return mutableLiveData;
}
}
Репозиторий
public MutableLiveData<MovieResponse> getSearchMovie(String apiKey, String movieTitle) {
final MutableLiveData<MovieResponse> searchData = new MutableLiveData<>();
api.getSearchMovie(BuildConfig.API_KEY, movieTitle).enqueue(new Callback<MovieResponse>() {
@Override
public void onResponse(Call<MovieResponse> call, Response<MovieResponse> response) {
if (response.isSuccessful()) {
searchData.setValue(response.body());
} else {
searchData.setValue(null);
}
}
@Override
public void onFailure(Call<MovieResponse> call, Throwable t) {
searchData.setValue(null);
}
});
return searchData;
}