很多時(shí)候 APP 有些頁(yè)面领追,會(huì)有需要展示多個(gè)不同類型的數(shù)據(jù)都在一個(gè)頁(yè)面,而且數(shù)據(jù)是服務(wù)器動(dòng)態(tài)返回的响逢,順序也是不確定的绒窑。這時(shí)候我們就需要在 RecyclerView 的 Adapter 做一些對(duì)應(yīng)的處理。
這時(shí)候我們就需要在RecyclerView的Adapter做一些對(duì)應(yīng)的處理舔亭。
寫了個(gè) Demo 放在了 Github 上:https://github.com/jeffreyxuworld/RecyclerViewAdapter
例子1:利用 getItemViewType些膨,做不同 position 位置的處理。
@Override
public int getItemViewType(int position) {
if (position == 0) {
return SHOW_BANNER_AREA_TYPE;
}else if(position == getItemCount() - 1){
return SHOW_BOTTOM_AREA_TYPE;
} else {
if(novelLibraryBeans != null && novelLibraryBeans.size() > 0){
if(position == getItemCount() - 2){
return SHOW_STYLE_TYPE_4;
}else{
if(recmdsBeans.get(position - 1).style_type == 1){
return SHOW_STYLE_TYPE_1;
}else if(recmdsBeans.get(position - 1).style_type == 2){
return SHOW_STYLE_TYPE_2;
}else if(recmdsBeans.get(position - 1).style_type == 3){
return SHOW_STYLE_TYPE_3;
}
}
}else{
if(recmdsBeans.get(position - 1).style_type == 1){
return SHOW_STYLE_TYPE_1;
}else if(recmdsBeans.get(position - 1).style_type == 2){
return SHOW_STYLE_TYPE_2;
}else if(recmdsBeans.get(position - 1).style_type == 3){
return SHOW_STYLE_TYPE_3;
}
}
}
return SHOW_BANNER_AREA_TYPE;
}
Demo 截圖1
例子2:自定義 GridLayoutManager 的 getSpanSize钦铺,實(shí)現(xiàn)每行不同個(gè)數(shù)的布局订雾。
val imageAdapter = BannerAdapter(getData(6))
val gridLayoutManager = GridLayoutManager(this, 2)
gridLayoutManager.spanSizeLookup = object : SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
return if (imageAdapter.getItemViewType(position) == 2) {
2 //如果是長(zhǎng)的圖,占2份的位置
} else {
1
}
}
}
currentBinding.rvGrid.layoutManager = gridLayoutManager
currentBinding.rvGrid.adapter = imageAdapter
Demo 截圖2