RecyclerView在GridLayoutManager添加Head、Foot

2016-11-22遇到的一点小问题

之前添加头部,ListView是直接addHead,很方便。换成RecyclerView没有这个方法,则是在自定义的RecyclerView.Adapter
在*onCreateViewHolder(ViewGroup parent, int viewType)方法里面返回不同的RecyclerView.ViewHolder

 @Overridepublic 
RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {    
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());   
    if (viewType == TYPE_FOOT) {        
        View view = inflater.inflate(R.layout.a, parent, false);        
        return new FootHolder(view);   
     } else {        
        View view = inflater.inflate(R.layout.b, parent, false);       
        return new Holder(view);   
     }
}

然后在onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int position)方法里分别设置数据

if (getItemViewType(position) == TYPE_FOOT) {
}else{
}

这种做法和之前的ListView设置不同item布局使用getItemViewType()类似。

当然,因为之前一直使用的LinearLayoutManager,所以这样没问题,不过今天用到了GridLayoutManager(context, 2),就需要使用setSpanSizeLookup

final GridLayoutManager gridLayoutManager = new GridLayoutManager(context, 2);
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {    
    @Override    
    public int getSpanSize(int position) {
        return position == 0 ? gridLayoutManager.getSpanCount():1;    
        }
    }
);
mRecycler.setLayoutManager(gridLayoutManager);
mRecycler.setAdapter(mAdapter);

因为我只在第0行使用head,所以就写死了,第0行占用Span为2,其他的为1项。

关于这个在网上找了下,真不好找,搜出来全是一堆github的项目,只是一个地方用到,太麻烦了,还好在这边看到了 http://www.open-open.com/lib/view/open1437662138631.html 感谢,顺便记录一下。

关于StaggeredGridLayoutManager现在还没用到,不知道是不是也这样。

private RecyclerView.ViewHolder getRecyclerHolder(int position) {
    return mRecycler.getChildViewHolder(mRecycler.getLayoutManager().getChildAt(position));
}

你可能感兴趣的:(RecyclerView在GridLayoutManager添加Head、Foot)