You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RecyclerView中仅展示列表的第51至100项

在自定义Adapter中展示指定范围的列表数据

要实现仅展示原列表的第51至100项(对应原列表0-based索引的50到99),只需修改Adapter的几个核心方法,调整数据索引的对应关系即可,以下是具体实现:

核心思路

原列表的第51项对应索引50,第100项对应索引99,共50条数据。通过重写Adapter的getCount()、数据绑定相关方法,将Adapter的本地position转换为原列表的目标索引。

代码实现(以RecyclerView.Adapter为例)

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
    private List<YourDataModel> originalDataList;
    // 定义原列表中要展示的起始、结束索引(0-based)
    private final int START_INDEX = 50;
    private final int END_INDEX = 99;

    public CustomAdapter(List<YourDataModel> dataList) {
        this.originalDataList = dataList;
        // 可选:添加数据长度校验,避免越界
        if (originalDataList.size() <= END_INDEX) {
            throw new IllegalArgumentException("原列表数据长度不足,无法覆盖指定展示范围");
        }
    }

    @Override
    public int getItemCount() {
        // 返回要展示的条目总数
        return END_INDEX - START_INDEX + 1;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        // 将Adapter的position转换为原列表的索引
        int originalPos = position + START_INDEX;
        YourDataModel item = originalDataList.get(originalPos);
        // 绑定数据到视图
        holder.contentTv.setText(item.getContent());
        // 其他视图绑定逻辑...
    }

    // ViewHolder实现保持不变
    static class ViewHolder extends RecyclerView.ViewHolder {
        TextView contentTv;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            contentTv = itemView.findViewById(R.id.tv_content);
        }
    }
}

如果是ListView的BaseAdapter

逻辑完全一致,重写对应的方法即可:

public class CustomBaseAdapter extends BaseAdapter {
    private List<YourDataModel> originalDataList;
    private final int START_INDEX = 50;
    private final int END_INDEX = 99;

    public CustomBaseAdapter(List<YourDataModel> dataList) {
        this.originalDataList = dataList;
    }

    @Override
    public int getCount() {
        return END_INDEX - START_INDEX + 1;
    }

    @Override
    public Object getItem(int position) {
        return originalDataList.get(position + START_INDEX);
    }

    @Override
    public long getItemId(int position) {
        // 若原数据ID与索引一致,直接返回转换后的索引;否则根据实际逻辑返回
        return position + START_INDEX;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // 视图复用逻辑...
        int originalPos = position + START_INDEX;
        YourDataModel item = originalDataList.get(originalPos);
        // 绑定数据...
        return convertView;
    }
}

注意事项

  • 必须确保原列表的长度大于END_INDEX(即原列表至少有100条数据),否则会触发数组越界异常,建议在Adapter构造方法中添加校验逻辑。
  • 若后续需要动态调整展示范围,可以将START_INDEX和END_INDEX改为可传入的参数,提升Adapter的灵活性。

内容的提问来源于stack exchange,提问作者Vinit Grover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:50:21