XRecyclerView的多条目加载(banner+列表)

本文介绍了如何使用XRecyclerView实现多条目加载、下拉刷新和上拉加载更多功能,同时具备添加header的能力。XRecyclerView操作简便,无需额外layout和特殊adapter,且内置多种加载效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XRecyclerView可以实现多条目加载,下拉刷新,滚动到底部加载更多以及添加header功能的的RecyclerView。使用方式和RecyclerView完全一致,不需要额外的layout,不需要写特殊的adater。加载效果内置了AVLoadingIndicatorView上的所有效果,可以根据需要指定。


首先,使用XRecyclerView需要导依赖包

compile 'com.jcodecraeer:xrecyclerview:1.3.2'


添加布局文件:

<com.jcodecraeer.xrecyclerview.XRecyclerView
    android:id="@+id/xrecycler"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</com.jcodecraeer.xrecyclerview.XRecyclerView>


设置适配器:

public class XRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    Movie movie;
    Context context;

    public XRecyclerAdapter(Movie movie, Context context) {
        this.movie = movie;
        this.context = context;
    }

    public interface OnItemClickLitener
    {
        void onItemClick(View view, int position);
//        void onItemLongClick(View view , int position);
    }

    private OnItemClickLitener mOnItemClickLitener;

    public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener)
    {
        this.mOnItemClickLitener = mOnItemClickLitener;
    }


    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if(viewType==1){
            MyViewHolder myViewHolder = new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_one, null));
            return myViewHolder;
        }else if(viewType==2){
            MyViewHolder2 myViewHolder2 = new MyViewHolder2(LayoutInflater.from(context).inflate(R.layout.item_two, null));
            return myViewHolder2;
        }
        return null;
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof MyViewHolder){
            String pic = movie.getRet().getList().get(position).getPic();
            ArrayList<String> imgs = new ArrayList<>();
            for(int i=0;i<movie.getRet().getList().size();i++){
                imgs.add(movie.getRet().getList().get(i).getPic());
            }
            ((MyViewHolder) holder).banner.setImageLoader(new GlideImage());
            ((MyViewHolder) holder).banner.setImages(imgs);
            ((MyViewHolder) holder).banner.start();
        }else if(holder instanceof MyViewHolder2){
            ((MyViewHolder2) holder).img.setImageURI(movie.getRet().getList().get(position).getPic());
            ((MyViewHolder2) holder).title.setText(movie.getRet().getList().get(position).getTitle());
            ((MyViewHolder2) holder).description.setText(movie.getRet().getList().get(position).getDescription());
        }

        // 如果设置了回调,则设置点击事件
        if (mOnItemClickLitener != null)
        {
            holder.itemView.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    int pos = holder.getLayoutPosition();
                    mOnItemClickLitener.onItemClick(holder.itemView, pos);
                }
            });

//            holder.itemView.setOnLongClickListener(new OnLongClickListener()
//            {
//                @Override
//                public boolean onLongClick(View v)
//                {
//                    int pos = holder.getLayoutPosition();
//                    mOnItemClickLitener.onItemLongClick(holder.itemView, pos);
//                    return false;
//                }
//            });
        }
    }

    @Override
    public int getItemCount() {
        return movie.getRet().getList().size();
    }

    @Override
    public int getItemViewType(int position) {
        if (position==0){
            return 1;
        }else{
            return 2;
        }

    }

    class MyViewHolder extends RecyclerView.ViewHolder{

        Banner banner;
        public MyViewHolder(View itemView) {
            super(itemView);

            banner= (Banner) itemView.findViewById(R.id.bannertu);
        }
    }

    class MyViewHolder2 extends RecyclerView.ViewHolder{

        TextView title,description;
        SimpleDraweeView img;
        public MyViewHolder2(View itemView) {
            super(itemView);

            title= (TextView) itemView.findViewById(R.id.title);
            description= (TextView) itemView.findViewById(R.id.description);
            img= (SimpleDraweeView) itemView.findViewById(R.id.re_img);
        }
    }
}


MainActivity

初始化xrecycler

xrecycler.setLayoutManager(new LinearLayoutManager(this));

XRecyclerAdapter adapter = new XRecyclerAdapter(movie, ListActivity.this);
xrecycler.setAdapter(adapter);adapter.setOnItemClickLitener(new XRecyclerAdapter.OnItemClickLitener(){ @Override public void onItemClick(View view, int position) { Toast.makeText(ListActivity.this, position + " click", Toast.LENGTH_SHORT).show(); EventBus.getDefault().postSticky(new DataEvent(position)); Intent intent = new Intent(ListActivity.this, MainActivity.class); startActivity(intent); }});

xrecycler.setLoadingListener(new XRecyclerView.LoadingListener() {
    @Override
    public void onRefresh() {
        xrecycler.refreshComplete();
    }

    @Override
    public void onLoadMore() {
        page++;
        presenter.seturl(page);
        xrecycler.loadMoreComplete();
        adapter.notifyDataSetChanged();
    }
});


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值