简体   繁体   中英

How to show fixed count of items in Recyclerview?

I have a task to show fixed count of items on the screen. It doens't mean that I have fixed size of list, it means that only 5 items should be visible when scrolling.

How it can be done? I didn't find any useful information about it.

I also encountered a similar problem. I have solved it almost perfectly. I chose to extend LinearLayoutManager .

public class MaxCountLayoutManager extends LinearLayoutManager {

    private int maxCount = -1;

    public MaxCountLayoutManager(Context context) {
        super(context);
    }

    public MaxCountLayoutManager(Context context, int orientation, boolean reverseLayout) {
        super(context, orientation, reverseLayout);
    }

    public MaxCountLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    public void setMaxCount(int maxCount) {
        this.maxCount = maxCount;
    }

    @Override
    public void setMeasuredDimension(int widthSize, int heightSize) {
        int maxHeight = getMaxHeight();
        if (maxHeight > 0 && maxHeight < heightSize) {
            super.setMeasuredDimension(widthSize, maxHeight);
        }
        else {
            super.setMeasuredDimension(widthSize, heightSize);
        }
    }

    private int getMaxHeight() {
        if (getChildCount() == 0 || maxCount <= 0) {
            return 0;
        }

        View child = getChildAt(0);
        int height = child.getHeight();
        final LayoutParams lp = (LayoutParams) child.getLayoutParams();
        height += lp.topMargin + lp.bottomMargin;
        return height*maxCount+getPaddingBottom()+getPaddingTop();
    }
}

How to use:

# in kotlin
rcyclerView.layoutManager = MaxCountLayoutManager(context).apply { setMaxCount(5) }

But the height of each item needs to be the same, because I only considered the height and margin of the first item.

If i am getting your question correctly, you are trying to show a fixed number of list items on the screen, whenever the user stops scrolling.

This can be done by calculating screen height/width and then setting your list item layout dimensions(height/width), accordingly.

view.getLayoutParams().width = getScreenWidth() / VIEWS_COUNT_TO_DISPLAY;

Now, depending on whether you want a horizontal or a vertical list, change width or height values of your list item layout.

Check these links

RecyclerView number of visible items

How to show exact number of items in RecyclerView?

Simplest solution is to have onBindViewHolder() set its views height/width dynamically. For vertical list:

float containerHeight = mRecyclerView.getHeight();
holder.itemView.setMinimumHeight(Math.round(containerHeight/5));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM