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 初始化xrecyclerxrecycler.setLayoutManager(new LinearLayoutManager(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); }});XRecyclerAdapter adapter = new XRecyclerAdapter(movie, ListActivity.this);xrecycler.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { xrecycler.refreshComplete(); } @Override public void onLoadMore() { page++; presenter.seturl(page); xrecycler.loadMoreComplete(); adapter.notifyDataSetChanged(); } });