很多時候 APP 有些頁面,會有需要展示多個不同類型的數(shù)據(jù)都在一個頁面,而且數(shù)據(jù)是服務(wù)器動態(tài)返回的,順序也是不確定的。這時候我們就需要在 RecyclerView 的 Adapter 做一些對應(yīng)的處理。
這時候我們就需要在RecyclerView的Adapter做一些對應(yīng)的處理。
寫了個 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,實現(xiàn)每行不同個數(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 //如果是長的圖,占2份的位置
} else {
1
}
}
}
currentBinding.rvGrid.layoutManager = gridLayoutManager
currentBinding.rvGrid.adapter = imageAdapter

Demo 截圖2