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?

+3


source to share


1 answer


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)

+7


source







All Articles