瓦项目中用到的SwipeRefRecyclerView,它是个自定义控件,继承viewgroup,然后addview(recyclerView)。大致是这样子。
默认SwipeRefRecyclerView单列的。如何改为多列,和GridView一样的效果呢,因为要用到SwipeRefRecyclerView刷新,加载更多效果,如果用GridView替换肯定不符合需求。
解决方案:
1. swipeRefRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2));//2是列数
2. 解决底部加载更多显示问题,如果分两列了,加载更多也是显示一列的长度。这明显不符合需求。
解决:在BaseRecyclerAdapter覆写
到目前为止,基本修改且满足需求了。可能大家没有SwipeRefRecyclerView自定义控件,有就更好,网上好像有开源的。@Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); RecyclerView.LayoutManager manager = recyclerView.getLayoutManager(); if(manager instanceof GridLayoutManager){ // 布局是GridLayoutManager所管理 final GridLayoutManager gridLayoutManager = (GridLayoutManager) manager; gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { // 如果是Header、Footer的对象则占据spanCount的位置,否则就只占用1个位置 return (isHeader(position) || isFooter(position)) ? gridLayoutManager.getSpanCount() : 1; } }); } } public int getHeaderViewsCount() { return mHeaderViews.size(); } public int getFooterViewsCount() { return mFooterViews.size(); } public boolean isHeader(int position) { return getHeaderViewsCount() > 0 && position == 0; } public boolean isFooter(int position) { int lastPosition = getItemCount() - 1; return getFooterViewsCount() > 0 && position == lastPosition; }