RecyclerView用法总结

来源:互联网 发布:苹果5s蜂窝数据打不开 编辑:程序博客网 时间:2024/06/15 15:07

我个人觉得使用RecycleView更加方便,主要是我喜欢它的低耦合,随你配置,还有就是它里边帮你自动生成ViewHodler,这就很开心了.

以下只是伪代码:

一,adapter配置

public class RecyclerAdapter extends RecyclerView.Adapter    private static final int TYPE_HEAD = 0;    private static final int TYPE_NORMAL = 1;    private static final int TYPE_FOOT = 2;    private Context context;    private BannerBean bannerBean;    private ArrayList<Data> item_list;    public RecyclerAdapter (Context context, BannerBean bannerBean, ArrayList<Data> item_list){        this.context = context;        this.bannerBean = bannerBean;        this.item_list = item_list;    }    //根据你的要求返回不同的ViewHodler    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        RecyclerView.ViewHolder holder = null;        if(viewType == TYPE_HEAD){            holder = new BannerViewHoler(LayoutInflater.from(context).inflate(R.layout.item_banner, parent, false));        }else if (viewType == TYPE_NORMAL){            holder = new ItemViewHolder(LayoutInflater.from(context).inflate(R.layout.item_title, parent, false));        }else if(viewType == TYPE_FOOT){            holder = new FootViewHolder(LayoutInflater.from(context).inflate(R.layout.item_footer, parent, false));        }        return holder;    }        //实际就是将对应的ViewHodler里的控件实例化    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {        if(holder instanceof BannerViewHoler){            BannerViewHoler bannerViewHoler = (BannerViewHoler) holder;            bannerViewHoler.banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE);            bannerViewHoler.banner.setBannerTitle(bannerBean.getTitle());            bannerViewHoler.banner.setImages(bannerBean.getImg_url());        }else if (holder instanceof ItemViewHolder){            ItemViewHolder itemViewHolder = (ItemViewHolder) holder;            itemViewHolder.simpleDraweeView.setImageURI(item_list.get(position-1).getThumbnail());            itemViewHolder.textView.setText(item_list.get(position-1).getTitle());            if (listener != null){                holder.itemView.setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View v) {                        listener.onClick(v, position-1);                    }                });            }        }else if (holder instanceof FootViewHolder){            FootViewHolder footViewHolder = (FootViewHolder) holder;            if (item_list.size() > 0){                footViewHolder.linearLayout.setVisibility(View.VISIBLE);            }        }    }    @Override    public int getItemCount() {        //if (item_list.size() > 0 && item_list != null)        System.out.println("======================");        return item_list.size()+1+1;        //else return 0;    }    @Override    public int getItemViewType(int position) {        if(position == 0){            return TYPE_HEAD;        }else if (position+1 == getItemCount()){            return TYPE_FOOT;        } else{            return TYPE_NORMAL;        }    }    //自定义三个ViewHodler    class BannerViewHoler extends RecyclerView.ViewHolder{        private Banner banner;        public BannerViewHoler(View itemView) {            super(itemView);            banner = (Banner) itemView.findViewById(R.id.banner);        }    }    class ItemViewHolder extends RecyclerView.ViewHolder{        private SimpleDraweeView simpleDraweeView;        private TextView textView;        public ItemViewHolder(View itemView) {            super(itemView);            simpleDraweeView = (SimpleDraweeView) itemView.findViewById(R.id.simpleDraweeView);            textView = (TextView) itemView.findViewById(R.id.textView_title);        }    }    class FootViewHolder extends RecyclerView.ViewHolder{        LinearLayout linearLayout;        public FootViewHolder(View itemView) {            super(itemView);            linearLayout = (LinearLayout) itemView.findViewById(R.id.liner_foot);        }    }}

二.上面只是对Adapter的配置,RecycleView还提供给我们三种布局的实现,这就是它区别listView的另一个地方了.
    1.mRecyclerView.setLayoutManager(new GridLayoutManager(this, 4, GridLayoutManager.VERTICAL, false));

    2.mRecyclerView.setLayoutManager(newStaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));

                                             //瀑布流布局

    3.mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
             //这几个参数一个是分几列或几行,一个是对它的orientation进行配置,看你的个人需求了.

三.还有特点哦:
  在adapter中使用这个方法可以带有动画的删除或插入相应位置的item
    notifyItemRemoved(position)
    notifyItemInserted(position);
记得加这个(当然你也可以自定义动画)
  mRecyclerView.setItemAnimator(new DefaultItemAnimator());

 

原创粉丝点击