RecyclerView加载不同类型的布局

来源:互联网 发布:暂七师军乐队 知乎 编辑:程序博客网 时间:2024/04/19 16:14

       RecyclerView有什么优点以及和ListView有什么区别就不多说了,今天来实现RecyclerView的不同item布局效果,直接上图:



       实现的思路是为数据添加一个type,根据type的值来判定getItemViewType返回的类型。getItemViewType(int position)返回的值就是onCreateViewHolder(ViewGroup parent, int viewType)的参数viewType,所以根据不同的值加载不同的布局。代码如下:

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{    public static enum ITEM_TYPE{        ITEM_TYPE_LEFT,        ITEM_TYPE_RIGHT;    }    private LayoutInflater layoutInflater;    private Context context;    private List<Content> contents;    public MyAdapter(Context c, List<Content> strs){        layoutInflater = LayoutInflater.from(c);        context = c;        contents = strs;    }    @Override    public int getItemCount() {        return contents != null ? contents.size() : 0;    }    @Override    public int getItemViewType(int position) {        return contents.get(position).getType() == 0 ? ITEM_TYPE.ITEM_TYPE_LEFT.ordinal() : ITEM_TYPE.ITEM_TYPE_RIGHT.ordinal() ;    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        if(viewType == ITEM_TYPE.ITEM_TYPE_LEFT.ordinal()){            return new LeftViewHolder(layoutInflater.inflate(R.layout.item_text_left,parent,false));        }else{            return new RightViewHolder(layoutInflater.inflate(R.layout.item_text_right,parent,false));        }    }    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {        if(holder instanceof LeftViewHolder){            ((LeftViewHolder) holder).tv_left.setText(contents.get(position).getMessage());        }else if(holder instanceof  RightViewHolder){            ((RightViewHolder) holder).tv_right.setText(contents.get(position).getMessage());        }    }    public static class LeftViewHolder extends RecyclerView.ViewHolder{        public TextView tv_left;        public LeftViewHolder(View v){            super(v);            tv_left = (TextView)v.findViewById(R.id.tv_left);        }    }    public static class RightViewHolder extends RecyclerView.ViewHolder{        public TextView tv_right;        public RightViewHolder(View v){            super(v);            tv_right = (TextView)v.findViewById(R.id.tv_right);        }    }}



0 0