2016-11-22遇到的一点小问题
之前添加头部,ListView是直接addHead,很方便。换成RecyclerView没有这个方法,则是在自定义的RecyclerView.Adapter<RecyclerView.ViewHolder>
,
在*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));
}