給RecyclerView添加頭部


一般通過 ?item類型 ?判斷是否 ?頭部view, 從而占據(jù)一行顯示:

(recycleView內(nèi)部實(shí)現(xiàn)了復(fù)用view,是通過getViewType得到類型判斷是否復(fù)用還是調(diào)用adapter內(nèi)方法創(chuàng)建新的view,so不建議返回position,每次都返回不同值會(huì)喪失復(fù)用機(jī)制。)

RecyclerView有3個(gè)布局管理器:

1;LinearLayoutManager

直接設(shè)置給RecyclerView,adapter中第一個(gè)item就是頭部View

mRecyclerView.setLayoutManager(newandroid.support.v7.widget.LinearLayoutManager(this,

android.support.v7.widget.LinearLayoutManager.VERTICAL,//縱向布局

false));//從第一個(gè)item開始顯示

2:GridLayoutManager

android.support.v7.widget.GridLayoutManager gridLayoutManager =newandroid.support.v7.widget.GridLayoutManager(this,3,android.support.v7.widget.GridLayoutManager.VERTICAL,false);

gridLayoutManager需要設(shè)置?setSpanSizeLookup,根據(jù)返回值決定該item占據(jù)幾列,當(dāng)前gridLayoutManager的列數(shù)是3,當(dāng)返回3時(shí)就占據(jù)了一行顯示。

gridLayoutManager.setSpanSizeLookup(newandroid.support.v7.widget.GridLayoutManager.SpanSizeLookup() {

@Override

public intgetSpanSize(intposition) {

returnposition ==0?3:1;

}

});

mRecyclerView.setLayoutManager(gridLayoutManager);

3;StaggeredGridLayoutManager

android.support.v7.widget.StaggeredGridLayoutManager staggeredGridLayoutManager =newandroid.support.v7.widget.StaggeredGridLayoutManager(3,android.support.v7.widget.StaggeredGridLayoutManager.VERTICAL);

mRecyclerView.setLayoutManager(staggeredGridLayoutManager);

設(shè)置了staggeredGridLayoutManager后需要在其adapter重寫一個(gè)方法onViewAttachedToWindow

@Override

public voidonViewAttachedToWindow(android.support.v7.widget.RecyclerView.ViewHolder holder) {

super.onViewAttachedToWindow(holder);

android.view.ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();

if( lp ?!= null && ?lp ?instanceof ?android.support.v7.widget.StaggeredGridLayoutManager.LayoutParams) {

android.support.v7.widget.StaggeredGridLayoutManager.LayoutParams p = (android.support.v7.widget.StaggeredGridLayoutManager.LayoutParams) lp;

? ? ? ? ? /*主要代碼 是 setFullSpan ,為true占據(jù)一行。網(wǎng)上有些帖子也是用這個(gè)方法,但是是重寫StaggeredGridLayoutManager,在其onMeasure使用setFullSpan,有的在adapter的onBindViewHolder使用setFullSpan,但是我運(yùn)行測(cè)試過有bug:不止第一個(gè)item占據(jù)一行,有時(shí)第一個(gè)item寬度很小,但是占據(jù)一行的情況。*/

? ? ? ? ? p.setFullSpan(holder.getLayoutPosition() ==0?true:false);

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容