RecyclerView shows nothing after re-creation, in Android
So I have this detailed activity where I have RecyclerView
at the bottom and download "Related Movies".
adapter = new CustomRecycleAdapter(getRelatedMovies()); adapter.notifyDataSetChanged();
I am loading data using Retrofit API. This is my function getRelatedMovies()
:
ArrayList<RelatedMovies> items;
private ArrayList<RelatedMovies> getRelatedMovies() {
items = new ArrayList<>();
Plugin.api.GetPackageVideos(publisher_id, package_id, getIntent().getStringExtra("movieCategory"), 1 + "", "asc", new Callback<MovieResults>() {
@Override
public void success(MovieResults movieResults, Response response) {
Videos[] vids = movieResults.getResponse().getResult().getVideos();
for (int i = 0; i < vids.length; i++) {
items.add(new RelatedMovies(vids[i].getTitle(), vids[i].getCustom_attributes().getGenres_en().split(",")[0], vids[i].getCustom_attributes().getPromoImage()));
}
}
@Override
public void failure(RetrofitError error) {
Log.e("ERROR", error.toString());
}
});
return items;
}
So here's the problem: when I go back to the main screen to search for another movie and enter the Activity Activity with that movie ID, RecyclerView
it shows nothing, only the first time I open the movie. Here is the code for mine RecyclerAdapter
:
public class CustomRecycleAdapter extends RecyclerView.Adapter<CustomRecycleAdapter.ViewHolder> {
ArrayList<RelatedMovies> relatedMovies;
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView tvRelatedMovieTitle, tvRelatedMoviePrice;
public ImageView ivRelatedMoviePoster;
public CardView cv;
public ViewHolder(View itemView) {
super(itemView);
this.tvRelatedMovieTitle = (TextView) itemView.findViewById(R.id.tvRelatedMovieTitle);
this.tvRelatedMoviePrice = (TextView) itemView.findViewById(R.id.tvRelatedMoviePrice);
this.ivRelatedMoviePoster = (ImageView) itemView.findViewById(R.id.ivRelatedMoviePoster);
this.cv = (CardView) itemView.findViewById(R.id.cv);
}
}
public CustomRecycleAdapter(ArrayList<RelatedMovies> relatedMovies) {
this.relatedMovies = new ArrayList<RelatedMovies>();
this.relatedMovies = relatedMovies;
}
@Override
public CustomRecycleAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).
inflate(R.layout.recycle_view_cards, parent, false);
return new CustomRecycleAdapter.ViewHolder(itemView);
}
@Override
public void onBindViewHolder(final CustomRecycleAdapter.ViewHolder holder, int position) {
RelatedMovies movie = relatedMovies.get(position);
holder.tvRelatedMovieTitle.setText(movie.movieTitle);
holder.tvRelatedMoviePrice.setText(movie.moviePrice);
Glide.with(holder.ivRelatedMoviePoster.getContext())
.load(movie.moviePosterUrl)
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.fitCenter()
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
holder.ivRelatedMoviePoster.setImageBitmap(resource);
}
});
}
@Override
public int getItemCount() {
return relatedMovies.size();
}
}
Any idea why this is happening?
source to share
private void getRelatedMovies() {
Plugin.api.GetPackageVideos(publisher_id, package_id, getIntent().getStringExtra("movieCategory"), 1 + "", "asc", new Callback<MovieResults>() {
@Override
public void success(MovieResults movieResults, Response response) {
List<RelatedMovies> items = new ArrayList<>();
Videos[] vids = movieResults.getResponse().getResult().getVideos();
for (int i = 0; i < vids.length; i++) {
items.add(new RelatedMovies(vids[i].getTitle(), vids[i].getCustom_attributes().getGenres_en().split(",")[0], vids[i].getCustom_attributes().getPromoImage()));
}
adapter = new CustomRecycleAdapter(items);
recyclerView.setAdapter(adapter);
}
@Override
public void failure(RetrofitError error) {
Log.e("ERROR", error.toString());
}
});
}
Or you change the list inside an existing adapter and call notifyDataSetChanged () or one of the new methods it has https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html # notifyItemRangeInserted (int , int)
source to share