RecyclerView淺析

1、簡介:可以把它看作是ListView、GridView等的包裝產品,可以輕松實現上述倆的功能,并能用簡單的code完成復雜的需求:數據加載+item間隔樣式+item的增減動畫+click事件(click+longclick)

2、使用RecyclerView時如果項目報錯:

(1)檢查ExternalLibraries下是否有RecyclerView相關信息,若沒有檢查SDKManageer下是否有更新

(2)在app-build.gradle中添加:compile 'com.android.support:recyclerview-v7:25.3.1'

3、操作RecyclerView的代碼:

recyclerView = findView(R.id.id_recyclerview);mRecyclerView.setLayoutManager(layout);

a、LinearLayoutManager:線性布局,橫向或者縱向滑動列表

b、GridLayoutManager:表格布局

c、StaggeredGridLayoutManager:流式布局,例如瀑布流效果

//設置adapter

recyclerView.setAdapter(adapter)

//設置Item增加、移除動畫

recyclerView.setItemAnimator(newDefaultItemAnimator());

//添加分割線

recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.HORIZONTAL_LIST));

4、ItemDecoration:

首先要弄清楚幾個名詞含義,itemview、divider

方法的執行順序

getItemOffsets(通過outRect.set(l,t,r,b)設置指定itemview的paddingLeft,paddingTop,paddingRight,paddingBottom)

->onDraw(在繪制itemview之前繪制divider)

4、具體使用詳見大神文章:

Android RecyclerView 使用完全解析 體驗藝術般的控件)http://blog.csdn.net/lmj623565791/article/details/45059587

上述文章在使用StaggeredGridLayoutManager ItemDecoration有兩個問題:

(1)設置item間隔時最后一列右邊是不需要間隔的,但是會造成最后一列和其他列的寬度不一致,可以將getItemOffsets方法中的所有mDivider.getIntrinsicWidth()替換為如下right:

int column=itemPosition%spanCount;

int right=mDivider.getIntrinsicWidth()-(column+1)*mDivider.getIntrinsicWidth()/spanCount;

PS:關于ItemDecoration的詳細理解參加參見:

https://blog.piasy.com/2016/03/26/Insight-Android-RecyclerView-ItemDecoration/#fn:space-needed

(2)如果數據總數num%列數col==0,底部的divider也是不需要顯示的,在isLastRow方法中修改如下:

childCount = childCount - (childCount % spanCount==0?spanCount:childCount % spanCount);

項目下載地址:https://github.com/jacksonrickq1/RecyclerViewDemo

PS(上傳代碼到git參考:http://www.lxweimin.com/p/3e6094c15a46?_t_t_t=0.30564603745006025)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容