如何优雅的实现recycleview加入顶部headerview,实现一起滑动效果

 我来答
千锋教育
2017-01-26 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
 (1)在adapter中定义两个标志量,分别代表header布局和普通布局:
  //header布局标志
  private static final int TYPE_HEADER=0;
  //普通布局标志
  public static final int TYPE_NORMAL=1;
  (2)然后通过get构造器让我们可以通过adapter直接调用构造器直接设置headerview:
  //headerview的布局
  private View mHeaderView;

  public View getmHeaderView() {
  return mHeaderView;
  }
  public void setmHeaderView(View mHeaderView) {
  this.mHeaderView = mHeaderView;
  notifyItemInserted(0);
  }

  (3)接下来重写getviewtype方法,判断是否有headerview,根据是否有headerview返回不同的标志位;
  @Override
  public int getItemViewType(int position) {
  if(mHeaderView==null) return TYPE_NORMAL;
  if(position==0)return TYPE_HEADER;//将header插入到顶部
  return TYPE_NORMAL;
  }
  (4)在onCreateViewHolder根据不同的类型返回不同的viewholder:
  @Override
  public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  if(mHeaderView!=null&&viewType==TYPE_HEADER) return new BaseViewHolder(mHeaderView,mHeaderView,null);
  View mView = null;
  mView = mInflater.inflate(itemViewID, null, false);
  return new BaseViewHolder(mView, mHeaderView,monItemClickListener);
  }
  (5)最后在onBindViewHolder方法中根据不同的类型返回不同的布局,
  @Override
  public void onBindViewHolder(BaseViewHolder holder, int position) {
  if(getItemViewType(position)==TYPE_HEADER) return;
  bindData(holder, position);
  }
  (6)最后在baseviewholder中判断itemview是否为headerview,然后让adapter加载不同的viewholder
  public BaseViewHolder(View itemView,View mHeaderView, BaseAdapter.onItemClickListener onItemClickListener) {
  super(itemView);
  this.mHeaderView=mHeaderView;
  if(itemView==mHeaderView) return;
  mViews = new SparseArray<>();
  this.monItemClickListener = onItemClickListener;
  itemView.setOnClickListener(this);
  }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式