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) {
if (position == 0){
return 0;
} else if (position == 1){
return 1;
} else {
return 2;
}
}

我们需要在
@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来实现。
点击下载仿百度贴吧子评论加载更多

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值