如何优雅的实现recycleview加入顶部headerview,实现一起滑动效果
2016-12-04 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517184
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信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);
}
//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);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询