1臣缀、簡(jiǎn)介:可以把它看作是ListView瞭亮、GridView等的包裝產(chǎn)品家乘,可以輕松實(shí)現(xiàn)上述倆的功能蝗羊,并能用簡(jiǎn)單的code完成復(fù)雜的需求:數(shù)據(jù)加載+item間隔樣式+item的增減動(dòng)畫+click事件(click+longclick)
2、使用RecyclerView時(shí)如果項(xiàng)目報(bào)錯(cuò):
(1)檢查ExternalLibraries下是否有RecyclerView相關(guān)信息仁锯,若沒有檢查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:線性布局,橫向或者縱向滑動(dòng)列表
b业崖、GridLayoutManager:表格布局
c野芒、StaggeredGridLayoutManager:流式布局,例如瀑布流效果
//設(shè)置adapter
recyclerView.setAdapter(adapter)
//設(shè)置Item增加、移除動(dòng)畫
recyclerView.setItemAnimator(newDefaultItemAnimator());
//添加分割線
recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.HORIZONTAL_LIST));
4双炕、ItemDecoration:
首先要弄清楚幾個(gè)名詞含義狞悲,itemview、divider
方法的執(zhí)行順序
getItemOffsets(通過(guò)outRect.set(l,t,r,b)設(shè)置指定itemview的paddingLeft妇斤,paddingTop效诅,paddingRight,paddingBottom)
->onDraw(在繪制itemview之前繪制divider)
4趟济、具體使用詳見大神文章:
(Android RecyclerView 使用完全解析 體驗(yàn)藝術(shù)般的控件)http://blog.csdn.net/lmj623565791/article/details/45059587
上述文章在使用StaggeredGridLayoutManager ItemDecoration有兩個(gè)問題:
(1)設(shè)置item間隔時(shí)最后一列右邊是不需要間隔的,但是會(huì)造成最后一列和其他列的寬度不一致咽笼,可以將getItemOffsets方法中的所有mDivider.getIntrinsicWidth()替換為如下right:
int column=itemPosition%spanCount;
int right=mDivider.getIntrinsicWidth()-(column+1)*mDivider.getIntrinsicWidth()/spanCount;
PS:關(guān)于ItemDecoration的詳細(xì)理解參加參見:
https://blog.piasy.com/2016/03/26/Insight-Android-RecyclerView-ItemDecoration/#fn:space-needed
(2)如果數(shù)據(jù)總數(shù)num%列數(shù)col==0顷编,底部的divider也是不需要顯示的,在isLastRow方法中修改如下:
childCount = childCount - (childCount % spanCount==0?spanCount:childCount % spanCount);
項(xiàng)目下載地址:https://github.com/jacksonrickq1/RecyclerViewDemo
PS(上傳代碼到git參考:http://www.reibang.com/p/3e6094c15a46?_t_t_t=0.30564603745006025)