RecyclerView与SwipReferenceLayout实现下拉刷新与上拉分页加载

本文介绍了一个自定义的RecyclerView.Adapter,实现了多种布局样式并在不同位置显示不同内容。此外,还实现了上拉分页加载的功能,通过监听RecyclerView的滚动状态来触发数据加载。

RecyclerView为多布局样式,实现上拉分页加载
adapter

public class PictrueAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private List<PictrueBean> list;
    private Context context;
    private LayoutInflater inflater;
    private OnItemClickListener onItemClickListener;

    public PictrueAdapter(List<PictrueBean> list, Context context, OnItemClickListener onItemClickListener) {
        this.list = list;
        this.context = context;
        inflater = LayoutInflater.from(context);
        this.onItemClickListener = onItemClickListener;
    }

    //设置监听
    public interface OnItemClickListener {
        void onItemClickListener(View view, int position);
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = null;
        RecyclerView.ViewHolder viewHolder = null;
        //判断是哪种样式,加载哪种布局
        switch (viewType) {
            case 0:
                view = inflater.inflate(R.layout.pictrue_adapter_layout, parent, false);
                viewHolder = new MyViewHolder(view);
                break;
            case 1:
                view = inflater.inflate(R.layout.pictrue_item_layout, parent, false);
                viewHolder = new MyViewHolder2(view);
                break;
            case 2:
                view=inflater.inflate(R.layout.footer_layout,parent,false);
                viewHolder=new FooterViewHolder(view);
                break;
        }
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
        //判断不同的样式,显示不同的内容]
        if(holder instanceof PictrueAdapter.FooterViewHolder){
            ((FooterViewHolder) holder).button.setText("正在加载10条...");
        }else
        if (holder instanceof MyViewHolder) {
            ((MyViewHolder) holder).tvTitle.setText(list.get(position).getTitle());
            ((MyViewHolder) holder).tvCount.setText(list.get(position).getImgcount());
            ((MyViewHolder) holder).tvComment.setText(list.get(position).getReviewcount() + "");
            Picasso.with(context).load(list.get(position).getBigimgsrc()).error(R.drawable.default_news).placeholder(R.drawable.default_news).into(((MyViewHolder) holder).iv);
        } else if (holder instanceof MyViewHolder2) {
            ((MyViewHolder2) holder).tvTitle.setText(list.get(position).getTitle());
            ((MyViewHolder2) holder).tvCount.setText(list.get(position).getImgcount());
            ((MyViewHolder2) holder).tvComment.setText(list.get(position).getReviewcount() + "");
            String img = list.get(position).getSmallimgsrc();
            String[] imgs = img.split("\\|");
            Picasso.with(context).load(imgs[0]).error(R.drawable.default_news).placeholder(R.drawable.default_news).into(((MyViewHolder2) holder).iv1);
            Picasso.with(context).load(imgs[1]).error(R.drawable.default_news).placeholder(R.drawable.default_news).into(((MyViewHolder2) holder).iv2);
            Picasso.with(context).load(imgs[2]).error(R.drawable.default_news).placeholder(R.drawable.default_news).into(((MyViewHolder2) holder).iv3);
        }
        //设置点击item监听
        if (onItemClickListener != null) {
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int pos = holder.getLayoutPosition();
                    onItemClickListener.onItemClickListener(holder.itemView, pos);
                }
            });
        }
    }

    //设置不用的样式
    @Override
    public int getItemViewType(int position) {
        if (position == getItemCount() - 1) {
            return 2;
        } else
        if (position % 4 == 0) {
            return 0;
        } else {
            return 1;

        }
    }


    @Override
    public int getItemCount() {
        return list == null ? 0 : list.size()+1;
    }

    class MyViewHolder extends RecyclerView.ViewHolder {
        ImageView iv;
        TextView tvTitle, tvComment, tvCount;

        public MyViewHolder(View itemView) {
            super(itemView);
            iv = ((ImageView) itemView.findViewById(R.id.pictrue_iv));
            tvComment = ((TextView) itemView.findViewById(R.id.pictrue_comment));
            tvTitle = ((TextView) itemView.findViewById(R.id.pictrue_title));
            tvCount = ((TextView) itemView.findViewById(R.id.pictrue_count));
        }
    }

    class MyViewHolder2 extends RecyclerView.ViewHolder {
        ImageView iv1, iv2, iv3;
        TextView tvTitle, tvComment, tvCount;

        public MyViewHolder2(View itemView) {
            super(itemView);
            iv1 = ((ImageView) itemView.findViewById(R.id.pictrue_item_iv1));
            iv2 = ((ImageView) itemView.findViewById(R.id.pictrue_item_iv2));
            iv3 = ((ImageView) itemView.findViewById(R.id.pictrue_item_iv3));
            tvComment = ((TextView) itemView.findViewById(R.id.pictrue_item_comment));
            tvTitle = ((TextView) itemView.findViewById(R.id.pictrue_item_title));
            tvCount = ((TextView) itemView.findViewById(R.id.pictrue_item_count));
        }
    }

    class FooterViewHolder extends RecyclerView.ViewHolder {
        Button button;

        public FooterViewHolder(View itemView) {
            super(itemView);
            button = (Button) itemView.findViewById(R.id.footer_btn);

        }
    }
}

java代码:

   recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                if(newState==RecyclerView.SCROLL_STATE_IDLE) {
                    int lastPosition = -1;
                    RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();
                    if (manager instanceof LinearLayoutManager) {
                        lastPosition = ((LinearLayoutManager) manager).findLastVisibleItemPosition();

                    } else if (manager instanceof GridLayoutManager) {
                        lastPosition = ((GridLayoutManager) manager).findLastVisibleItemPosition();
                    } else if (manager instanceof StaggeredGridLayoutManager) {
                        int[] lastPositions = new int[((StaggeredGridLayoutManager) manager).getSpanCount()];
                        ((StaggeredGridLayoutManager) manager).findLastVisibleItemPositions(lastPositions);
                        lastPosition = findMax(lastPositions);
                    }
                    if (lastPosition == ((LinearLayoutManager) manager).getItemCount()-1) {
                        initData(list.get(list.size() - 1).getId());
                    }
                }

            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                    swip.setEnabled(manager.findFirstCompletelyVisibleItemPosition()==0);
            }
        });
         swip.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                handler.sendEmptyMessageDelayed(0,3000);
            }
        });
 private int findMax(int[] lastPositions){
        int max=lastPositions[0];
        for (int elem:lastPositions){
            if(elem>max){
                max=elem;
            }
        }
        return max;
    }

 private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            list.clear();
            initData(0);
            swip.setRefreshing(false);
        }
    };
内容概要:本文详细介绍了“电动汽车聚合可行域的内-外结合近似方法”的Matlab代码实现,旨在通过数值仿真手段对大规模电动汽车集群作为灵活资源参电网调度的能力边界进行建模逼近。该方法融合内部凸包构造外部约束逼近策略,精确刻画电动汽车在充电状态、功率调节、时间维度等方面的聚合可调能力范围,形成紧致的可行域表示,为高比例电动车接入下的电力系统优化调度、需求响应、车网互动(V2G)等关键应用提供可靠的建模基础。文中强调科研应兼顾严谨逻辑创新思维,并倡导借助YALMIP等成熟优化工具提升研究效率。完整的代码、工具包及相关案例可通过指定网盘链接和微信公众号“荔枝科研社”获取。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的科研人员,尤其适用于从事新能源并网、电动汽车调度、智能电网、综合能源系统等方向的研究生工程技术人员。; 使用场景及目标:①研究大规模电动汽车集群的聚合建模灵活性量化方法;②实现电动汽车聚合可行域的内-外近似算法;③支撑含高渗透率电动汽车的电力系统日前-实时协同优化调度;④学习并应用YALMIP工具进行数学规划建模求解;⑤为需求响应、市场机制设计及V2G运营提供技术支撑。; 阅读建议:建议读者按照文档指引循序渐进学习,结合网盘提供的完整资源(包括YALMIP工具包示例代码)进行实践调试,重点掌握内-外近似方法的数学建模逻辑、约束处理技巧及优化求解流程,并参考团队发布的其他相关案例,深化对优化算法仿真技术在能源系统中应用的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值