0

I want to repeat the items in recyclerview. After searching I couldn't find any soulution. I want to start the items again from the first after it is completed loading. I have done simple coding of getting data in recyclerview.

     public class DateAdapter extends RecyclerView.Adapter<DateAdapter.DateViewHolder> {
        private ArrayList<LabelerDate> dateDataList;


        private static final int VIEW_TYPE_PADDING = 1;
        private static final int VIEW_TYPE_ITEM = 2;
        private int paddingHeightDate = 0;

        private int selectedItem = -1;

        public DateAdapter(ArrayList<LabelerDate> dateData, int paddingHeightDate) {
            this.dateDataList = dateData;
            this.paddingHeightDate = paddingHeightDate;

        }


        @Override
        public DateViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            if (viewType == VIEW_TYPE_ITEM) {
                final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item,
                        parent, false);
                return new DateViewHolder(view);
            } else {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item,
                        parent, false);

                RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) view.getLayoutParams();
                layoutParams.height = paddingHeightDate;
                view.setLayoutParams(layoutParams);
                return new DateViewHolder(view);
            }
        }

        @Override
        public void onBindViewHolder(DateViewHolder holder, int position) {
            LabelerDate labelerDate = dateDataList.get(position);
            int count = dateDataList.size();
            int middleRowIndex = (int)count/2 ;
//            holder.tvDate.setTextSize(TypedValue.COMPLEX_UNIT_SP,(int)(count * middleRowIndex));
//            int prevIndex = middleRowIndex - 1;
//            int nextIndex = middleRowIndex + 1;

            if (getItemViewType(position) == VIEW_TYPE_ITEM) {
                holder.tvDate.setText(labelerDate.getNumber());
                holder.tvDate.setVisibility(View.VISIBLE);

                Log.d(TAG, "default " + position + ", selected " + selectedItem);
                if (position == selectedItem) {
                    Log.d(TAG, "center" + position);
                    holder.tvDate.setTextColor(Color.parseColor("#76FF03"));
                    holder.tvDate.setTextSize(35);

                } else {
                    holder.tvDate.setTextColor(Color.BLACK);
                    holder.tvDate.setTextSize(18);
                }
            } else {
                holder.tvDate.setVisibility(View.INVISIBLE);
            }
        }

        public void setSelecteditem(int selecteditem) {
            this.selectedItem = selecteditem;
            notifyDataSetChanged();
        }

        @Override
        public int getItemCount() {
            return dateDataList.size();
        }

        @Override
        public int getItemViewType(int position) {
            LabelerDate labelerDate = dateDataList.get(position);
            if (labelerDate.getType() == VIEW_TYPE_PADDING) {
                return VIEW_TYPE_PADDING;
            } else {
                return VIEW_TYPE_ITEM;
            }

        }


        public class DateViewHolder extends RecyclerView.ViewHolder {
            public TextView tvDate;

            public DateViewHolder(View itemView) {
                super(itemView);
                tvDate = (TextView) itemView.findViewById(R.id.tv_year);
            }
        }
    }

I want to implement like below

item1 item2 item3 item4 item5 item1 item2 item3 item4 item5

Andy valley
  • 31
  • 1
  • 8

3 Answers3

2

The following approach will help you to populate the list items into some multiples of original data item.

In you getItemCount() method

@Override
public int getItemCount() {
    return dateDataList.size() * MULTIPLIER; //MULTIPLIER is the number of times you want your data to repeat
}

In you onBindViewHolder() method

@Override
public void onBindViewHolder(DateViewHolder holder, int position) {
    LabelerDate labelerDate = dateDataList.get(position%dateDataList.size());
}
devgun
  • 1,003
  • 13
  • 33
0
 private ArrayList<LabelerDate> dateDataList;

That is the source of your items to be displayed on the recycler. When ever you populate said list just make sure to repeat the process so you get repeated items.

Marco Pierucci
  • 1,125
  • 8
  • 23
0

You can also use third party library :-

Add this library to your gradle file

//looping layout manager
implementation 'com.github.beksomega:loopinglayout:0.4.1'

And assign this layout to recyclerview

val lm = LoopingLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
recyclerview..layoutManager = lm

after implement this layout your recylerview repeat items after all items are scrolled.