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)