RecycleView多布局

RecycleView小结:
多种布局问题:1.每种布局的排列位置
2.每个布局,每一行的多少列
第一步:创建布局。
第二步:布局排列,首先RecyclerView.Adapter类自动会实现onCreateViewHolder(),onBindViewHolder()getItemCount()三个方法,如果对布局排列需要重写getItemType()方法,继续根据每种布局继承RecyclerView.ViewHolder创建ViewHolder。
然后,最简单的从上到下没有重复一次性排列,那就有多少布局就有多少ItemType,根据排列位置,就是对position进行分段;
接着,根据ItemType进行CreateView,ItemType与onCreateViewHolder()参数ViewType是相等的,然后在onBindViewHolder()通过instansof进行ViewHolder加载,getItemCount()方法直接返回数据的长度即可。
最后,这边使用GrideLayoutManager做例子,通过setSpanSizeLookup()设置每个布局的每行占据多少列,
recyclerView.setLayoutManager(new GridLayoutManager(
recyclerView.getContext(),4,
GridLayoutManager.VERTICAL,
false
));上面的4是说一行最多分成4分

public class RecycleViewMainAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<NovelBean> list;
private Context context;

private static final int ITEM_TYPE1 = 1;
private static final int ITEM_TYPE2 = 2;
private static final int ITEM_TYPE3 = 3;
public RecycleViewMainAdapter(List<NovelBean> list, Context context) {
    this.list = list;
    this.context = context;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    switch (viewType){
        case ITEM_TYPE1:
            return new GrideViewHolder(LayoutInflater.from(
                    parent.getContext()).inflate(
                    R.layout.adapter_gride_main,
                    parent, false));
        case ITEM_TYPE2:
            return new TextViewHolder(LayoutInflater.from(
                    parent.getContext()).inflate(
                    R.layout.adapter_text_main,
                    parent, false));
        case ITEM_TYPE3:
            return new ListViewHolder(LayoutInflater.from(
                    parent.getContext()).inflate(
                    R.layout.adapter_list_main,
                    parent, false));
        default:
            return null;
    }
}
@Override
public int getItemViewType(int position) {
    if (position<6){
        return ITEM_TYPE1;
    }else if(position==6){
        return ITEM_TYPE2;
    }else if(position>6){
        return ITEM_TYPE3;
    }
    return super.getItemViewType(position);
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    if (holder instanceof GrideViewHolder){
        bindGrideView((GrideViewHolder) holder,list.get(position));
    }else if(holder instanceof TextViewHolder){
        bindTextView((TextViewHolder) holder,list.get(position));
    }else if(holder instanceof ListViewHolder){
        bindListView((ListViewHolder) holder,list.get(position));
    }
}

private void bindGrideView(GrideViewHolder holder, NovelBean data) {
    if (TextUtils.isEmpty(data.getBookName())){
        holder.tv_name.setText("");
        holder.tv_des.setText("");
    }else{
        holder.tv_name.setText(data.getBookName());
        holder.tv_des.setText(data.getDescription());
        getPicture(data,holder.iv_bitmap);
    }
}

private void bindTextView(TextViewHolder holder, NovelBean data) {

}
private void bindListView(ListViewHolder holder, NovelBean data) {
    holder.tv_author.setText(data.getAuthor());
    holder.tv_catagory.setText(data.getCatagory());
    holder.tv_latchapter.setText(data.getLastChapter());
    holder.tv_bookname.setText(data.getBookName());
    holder.tv_updatetime.setText(data.getLastTime());
}

@Override
public int getItemCount() {
    return list.size();
}

@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
    GridLayoutManager manager = (GridLayoutManager) recyclerView.getLayoutManager();
    if (manager instanceof GridLayoutManager){
        GridLayoutManager grideManager = (GridLayoutManager) manager;
        grideManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                //根据总的百分比
                int type = getItemViewType(position);
                switch (type){
                    case ITEM_TYPE1:
                        return 2;
                    case ITEM_TYPE2:
                        return 4;
                    case ITEM_TYPE3:
                        return 4;
                    default:
                        return 4;
                }
            }
        });
    }
}

private class GrideViewHolder extends RecyclerView.ViewHolder {
    private TextView tv_name;
    private TextView tv_des;
    private ImageView iv_bitmap;
    public GrideViewHolder(View itemView) {
        super(itemView);
        iv_bitmap = (ImageView) itemView.findViewById(R.id.iv_gride_main);
        tv_des = (TextView) itemView.findViewById(R.id.tv_description_gride_main);
        tv_name = (TextView) itemView.findViewById(R.id.tv_name_gride_main);
    }
}
private class TextViewHolder extends RecyclerView.ViewHolder{
    public TextViewHolder(View itemView) {
        super(itemView);
    }
}
private class ListViewHolder extends RecyclerView.ViewHolder {
    private TextView tv_author;
    private TextView tv_catagory;
    private TextView tv_latchapter;
    private TextView tv_bookname;
    private TextView tv_updatetime;
    public ListViewHolder(View itemView) {
        super(itemView);
        tv_author = (TextView) itemView.findViewById(R.id.tv_author_list_main);
        tv_catagory = (TextView) itemView.findViewById(R.id.tv_catagory_list_main);
        tv_latchapter = (TextView) itemView.findViewById(R.id.tv_lastChapter_list_main);
        tv_bookname = (TextView) itemView.findViewById(R.id.tv_name_list_main);
        tv_updatetime = (TextView) itemView.findViewById(R.id.tv_updatetime_list_main);
    }
}

public void getPicture(NovelBean data, ImageView iv) {
    Glide.with(context).load(data.getBookBitmapURL()).listener(new RequestListener<String, GlideDrawable>()
    {
        @Override
        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource)
        {
            //Log.e(MainActivity.class.getSimpleName(), "e=" + e.getMessage());
            return false;
        }

        @Override
        public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target,
                                       boolean isFromMemoryCache, boolean isFirstResource)
        {
            return false;
        }
    }) .skipMemoryCache(false)
            .fitCenter().into(iv);
}}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值