Home > Software design >  RecyclerView: buggy scroll effect (Android)
RecyclerView: buggy scroll effect (Android)

Time:11-19

This is my first post here on StackOverflow. I have an issue with the horizontal androidx.recyclerview.widget.RecyclerView: the scrolling effect is really buggy. I'm using a custom adapter, but I don't think that's the issue. I'm also using Picasso for the images.

  • RecyclerView:
<androidx.recyclerview.widget.RecyclerView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@ id/test2"
    android:paddingTop="10dp"
    android:nestedScrollingEnabled="false"
    android:clipToPadding="false"
    android:clipChildren="false"
    android:overScrollMode="never"
    tools:ignore="MissingConstraints"/>
  • MainFilmsListAdapter.java (my adapter):
public class MainFilmsListAdapter extends RecyclerView.Adapter<MainFilmsListAdapter.MyViewHolder> {
    private List<MainFilms> filmsList;
    class MyViewHolder extends RecyclerView.ViewHolder {
        TextView mainFilmsTitle, mainFilmsURL;
        ImageView mainFilmsImage;
        MyViewHolder(View view) {
            super(view);
            mainFilmsTitle = view.findViewById(R.id.main_films_item_title);
            mainFilmsURL = view.findViewById(R.id.main_films_item_url);
            mainFilmsImage = view.findViewById(R.id.main_films_item_image);
        }
    }
    public MainFilmsListAdapter(List<MainFilms> filmsList) {
        this.filmsList = filmsList;
    }
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.main_films_item, parent, false);
        return new MyViewHolder(itemView);
    }
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {

        MainFilms film = filmsList.get(position);
        holder.mainFilmsTitle.setText(film.getMainFilmsTitle());
        holder.mainFilmsURL.setText(film.getMainFilmsURL());
        Picasso.get()
                .load(filmsList.get(position).getMainFilmsImage())
                .fit()
                .centerCrop()
                .into(holder.mainFilmsImage);

    }
    @Override
    public int getItemCount() {
        return filmsList.size();
    }
}
  • MainFilms.java:
public class MainFilms {
    String mainFilmsTitle;
    String mainFilmsImage;
    String mainFilmsURL;

    public MainFilms(String mainFilmsTitle, String mainFilmsURL, String mainFilmsImage) {
        this.mainFilmsTitle = mainFilmsTitle;
        this.mainFilmsURL = mainFilmsURL;
        this.mainFilmsImage = mainFilmsImage;
    }

    public String getMainFilmsTitle() {
        return mainFilmsTitle;
    }

    public String getMainFilmsURL() {
        return mainFilmsURL;
    }

    public String getMainFilmsImage() {
        return mainFilmsImage;
    }
}
  • MainActivity.java (RecyclerView):
mAdapter = new MainFilmsListAdapter(filmsList);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);


I can't figure out where the problem is, I've been looking for a solution for more than 5 hours. All I notice is that the view freezes when it reaches a certain item in the RecyclerView. I also tested the app on my Android cellphone. The number of itmes in the RecyclerView is constant.

CodePudding user response:

Looks like a problem with images loading.

You can try to read this related question and answers - Recyclerview painfully slow to load cached images form Picasso

CodePudding user response:

For me this looks like the adapter is not calculating the recyclerview item size correctly. Could you maybe post your adapter? And do you cache the images or load them while scrolling?

*Sry for answer, but i don't have enough reputation for a comment

  • Related