RecyclerView的加载显示多种布局

RecyclerView是对ListView的封装,所以ListView上能用的方法对RecyclerView同样适用,并且会更简单

在实际开发中,我们可能需要一个列表,显示多种布局,getItemViewType()方法完美解决了这个问题,在BaseAdapter中还有getViewTypeCount()这个方法。这里我们使用RecyclerView.Adapter。只用getItemViewType就可以了。

先来看这个方法
@Override
public int getItemViewType(int position) {
}

参数position代表RecyclerView的位置,而int型的返回值代表了布局的类型,我们可以用0,1,2…..来表示判断,例如:

@Override

public int getItemViewType(int position) {  //poistion 为当前显示的布局
   if(position==0){
        return TYPE_ONE;//第一种布局
    }else if(position==1){
        return TYPE_ONE;//第一种布局
    }else if(position==2){
        return TYPE_THREE;//第三种布局
    }
    else if(position==3){
        return TYPE_THREE;//第三种布局
    }
    else if(position==4){
        return TYPE_TWO;//第2种布局
    }
    else if(position==5){
        return TYPE_TWO;2第三种布局
    }
    return super.getItemViewType(position);
}

我们需要在
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

方法中判断view的类型。该方法的第二个参数viewType就是getItemViewType返回值的类型,通过判断值0,1,2…..来根据不同类型加载显示不同的布局,例如

@Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = null;
        ViewHolder holder = null;
        switch (viewType){
            case 0:
                view = LayoutInflater.from(mContext).inflate(android.R.layout.simple_list_item_1, parent, false);
                holder = new ViewHolderOne(view);
                break;
            case 1:
                view = LayoutInflater.from(mContext).inflate(android.R.layout.simple_list_item_2, parent, false);
                holder = new ViewHolderTwo(view);
                break;
            case 2:
                view = LayoutInflater.from(mContext).inflate(android.R.layout.simple_list_item_2, parent, false);
                holder = new ViewHolderThree(view);
                break;
        }
        return holder;
    }

最后在

@Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
        switch (getItemViewType(position)){
            case 0:
                final ViewHolderOne holderOne = (ViewHolderOne) holder;
                holderOne.text1.setText(beans.get(position).getTxt());
                break;
            case 1:
                ViewHolderTwo holderTwo = (ViewHolderTwo) holder;
                holderTwo.text1.setText(beans.get(position).getTxt());
                holderTwo.text2.setText(beans.get(position).getTxt());
                break;
            case 2:
                ViewHolderThree holderTwo = (ViewHolderTwo) holder;
                holderThree.text1.setText(beans.get(position).getTxt());
                holderThree.text2.setText(beans.get(position).getTxt());
                break;
        }
    }
在这里,我们要定义3个ViewHolder,我们的Adapter继承RecyclerView.Adapter就可以,以上就是列表显示多种布局的处理,灵活运用,举一反三。比如百度贴吧子评论的显示更多,就可以这样处理,通过控制getItemCount和getItemViewType来实现。

你可能感兴趣的:(RecyclerView的加载显示多种布局)