您的位置:首页 > 移动开发 > Android开发

Android 简捷地为RecyclerView添加HeadView和FootView

2016-08-20 20:27 357 查看
之前自己尝试用ViewType的思路去实现为RecyclerView添加HeadView和FootView,总感觉自己写的代码太啰嗦了,向两位大神学习了一下他们的编码思路写了个简单了些的,分享给大家。


RecyclerView添加Header的正确方式

Android 优雅的为RecyclerView添加HeaderView和FooterView

废话不多说,上图上代码。



public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {

private View headView;
private View footView;
public static final int HEAD = 1;
public static final int NORMAL = 2;
public static final int FOOT = 3;

private List<String> datas;

public RecyclerAdapter(List<String> datas) {
this.datas = datas;
}

public void addHeadView(View headView) {
this.headView = headView;
}

public void addFootView(View footView) {
this.footView = footView;
}

public int getHeadViewCount() {
return headView == null ? 0 : 1;
}

public int getFootViewCount() {
return footView == null ? 0 : 1;
}

@Override
public int getItemCount() {
return datas.size() + getHeadViewCount() + getFootViewCount();
}

@Override
public int getItemViewType(int position) {
if (position < getHeadViewCount()) return HEAD;
if (position >= datas.size() + getHeadViewCount()) return FOOT;
return NORMAL;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
if (viewType == HEAD) return new ViewHolder(headView);
if (viewType == FOOT) return new ViewHolder(footView);
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_recycleritem, null);
return new ViewHolder(view);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if (getItemViewType(position) == HEAD) return;
if (getItemViewType(position) == FOOT) return;
holder.tvItem.setText(datas.get(position-getHeadViewCount()));
}

class ViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.tv_item)
TextView tvItem;
public ViewHolder(View itemView) {
super(itemView);
if (itemView == headView) return;
if (itemView == footView) return;
ButterKnife.bind(this, itemView);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: