关于RecyclerView中getItemViewType(int position)

今天在学习给RecyclerView添加头部视图时,才发现可以向RecyclerView添加多种视图
具体过程为:在Adapter子类中
重写getItemViewType(int position) 方法,修改相应position的视图类型;
重写onCreateViewHolder(ViewGroup parent,int viewType )方法,为不同的viewType创建不同的ViewHolder子类;
重写onBindViewHolder(RecyclerView.ViewHolder holder, int position)方法,为不同的viewType添加不同的绑定方法;

例如,在ViewHolder子类中实现一个自定义的接口
public interface Bind { public void onBind(@param); }
不同的ViewHolder子类有不同的实现方式。然后在onBindViewHolder(RecyclerView.ViewHolder holder, int position)通一以

public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof Bind){
            ((Bind) holder).onBind(@param);
        }
    }

形式调用。

在写完之后很好奇什么时候会调用getItemViewType方法,因为看起来貌似对所有ViewHolder子类都调用相同的方法变更视图,却不会由于视图类型导致显示错误或者是报错。

发现:
在调用onBindViewHolder方法之前,会检查getItemViewType(position)检查调用该函数处视图的类型,并从对应的pool中取出同种Type的ViewHolder,若没有对应的ViewHolder,就调用onCreateViewHolder方法新建一个对应的ViewHolder。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值