怎么对稍微复杂点的 RecyclerView.Adapter 的开发

很多时候 APP 有些页面,会有需要展示多个不同类型的数据都在一个页面,而且数据是服务器动态返回的,顺序也是不确定的。这时候我们就需要在 RecyclerView 的 Adapter 做一些对应的处理。

这时候我们就需要在RecyclerView的Adapter做一些对应的处理。

写了个 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,实现每行不同个数的布局。

        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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容