1. 程式人生 > >Android開發SwipeRefRecyclerView多列顯示

Android開發SwipeRefRecyclerView多列顯示

        瓦專案中用到的SwipeRefRecyclerView,它是個自定義控制元件,繼承viewgroup,然後addview(recyclerView)。大致是這樣子。

       預設SwipeRefRecyclerView單列的。如何改為多列,和GridView一樣的效果呢,因為要用到SwipeRefRecyclerView重新整理,載入更多效果,如果用GridView替換肯定不符合需求。

解決方案:

       1.  swipeRefRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2));//2是列數
       2.  解決底部載入更多顯示問題,如果分兩列了,載入更多也是顯示一列的長度。這明顯不符合需求。
           解決:在BaseRecyclerAdapter覆寫
    @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;
    }
到目前為止,基本修改且滿足需求了。可能大家沒有SwipeRefRecyclerView自定義控制元件,有就更好,網上好像有開源的。