Android開發SwipeRefRecyclerView多列顯示
阿新 • • 發佈:2019-01-08
瓦專案中用到的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; }