android 如何限制RecyclerView中的项目数量?

3pvhb19x  于 2023-02-06  发布在  Android
关注(0)|答案(7)|浏览(248)

如何限制RecyclerView * I显示**的项目数量?
如果我覆盖getChildCount,我可以限制插入的数量,但这会导致它只插入那个数字,然后停止。我希望它继续插入/滚动,但只 * 显示 * X个项目。
(Note:每个项目的高度可能不同,因此限制基于数量而不是某个硬编码值非常重要。)

67up9zun

67up9zun1#

在Recyclerview的适配器类中;

private final int limit = 10;

 @Override
public int getItemCount() {
    if(ad_list.size() > limit){
        return limit;
    }
    else
    {
        return ad_list.size();
    }

}
pprl5pva

pprl5pva2#

一种解决方案是编程地设置每个子节点宽度,

@Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.MY_ITEM_TO_INFALTE, parent, false);

        itemView.getLayoutParams().width = (int) (getScreenWidth() / NUMBERS_OF_ITEM_TO_DISPLAY); /// THIS LINE WILL DIVIDE OUR VIEW INTO NUMBERS OF PARTS

        return new MyCreationItemAdapter.MyViewHolder(itemView);
    }

    public int getScreenWidth() {

        WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
        Display display = wm.getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);

        return size.x;
    }
nnsrf1az

nnsrf1az3#

在适配器中,只需设置一个限制,

@Override
        public int getItemCount() {
            int limit = 5;
            return Math.min(diseasesList.size(), limit);
    
        }
vsmadaxz

vsmadaxz4#

您可以简单地覆盖getCount()方法并测试适配器数据数组是否上级“DESIRED_MAX”,然后返回“DESIRED_MAX”,否则仅返回数据数组尺子或大小(array/ArrayList)

46qrfjad

46qrfjad5#

如果你想让它保持插入/滚动,但只显示X个项目,那么我有一个解决方案:X项的setVisibility更改为VISIBLE,其他项已删除。

public static final class ViewHolder extends RecyclerView.ViewHolder {
    public ViewHolder(View view) {
        super(view);
        handleShowView(view);
    }

    private void handleShowView(View view) {
        if (getAdapterPosition() > X - 1) {
            view.setVisibility(View.GONE);
            return;
        }
        view.setVisibility(View.VISIBLE);
    }
}

希望这能有所帮助

14ifxucb

14ifxucb6#

你能做的就是在回收器视图中找到一个列表项所需的dp。150 dp件/件。
然后在XML:

<RecyclerView
....
android:layout_height="wrap_content"
app:layout_constraintHeight_max="300dp" 
/>

这意味着如果回收器视图中的项目数〈300 dp/大约2个,它将 Package 内容,但如果超过300 dp/超过2个项目,它将回收整个视图,同时一次显示2个。

ymdaylpp

ymdaylpp7#

***从01/2023(androix,recyclerview等)最新的库警告这“可能”已经工作,但也许不再...

我仍在调查,但这似乎导致了例外:

@Override
public int getItemCount() {
    return Math.min(mDiffer.getCurrentList().size(),mListLimit);
}

第二次我加载更多的项目到列表中,然后“mListLimit”允许,它崩溃了我的应用程序。我必须加载itemcount〉mlistlimit一次,上面的行将抛出提到的异常。如果我只是用途:

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

那我就没有例外了。请注意,现在它必须有非常具体的值:listlimit是300,我加载20个项目,然后我加载1000,这会导致允许列表“溢出”,只有这样它才会崩溃。
也许这能帮上忙。

相关问题