XAdapter 特殊布局(Android RecyclerView)

XAdapter 是一个对 Android RecyclerView Adapter 的轻量级封装库,基于kotlin特性,可以做到 \color{red}{一个方法实现一个功能}

XAdapter 目录

\color{red}{*注意:特殊布局只支持LinearLayoutManager、GridLayoutManager、StaggeredGridLayoutManager}

头布局、脚布局、空布局、缺省页

//设置空布局,无数据时自动展示,初始化时设置,只能设置一个。
adapter.setEmpty<ItemEmptyBinding>()

//设置加载中缺省页,调用showDefaultPage()/hintDefaultPage()方法控制显示/隐藏,初始化时设置,只能设置一个。
adapter.setDefaultPage<ItemLoadingBinding>()

//添加并展示头布局,可以多个,可通过hasHeader属性控制隐藏/显示,
//也可通过removeHeader<ItemHomeHeaderBinding>()方法删除,可动态设置。
adapter.addHeader<ItemHomeHeaderBinding>()

//添加并展示头布局,可以多个,可通过hasFooter属性控制隐藏/显示,
//也可通过removeFooter<ItemHomeFooterBinding>()方法删除,可动态设置。
adapter.addFooter<ItemHomeFooterBinding>()

分组布局

将需要作为分组的provider isFixed参数设置为true,该类型item将占满整行。

val adapter = createAdapter()
    //将形参isFixed置为true,则该类型填充整行,实现分组效果
    .withType<ItemHomeTitleBinding, String>(isFixed = true) {
        
    }
    .withType<ItemImageAutoHeightBinding, Int> {
      
    }
    .toAdapter()

方法定义

/**
 * 添加头布局
 * 改方法可动态设置,设置后直接展示。
 *
 * @param tag 备用字段,可用于标记,或数据存储与传递
 * @param init 初始化时回调,可在此设置事件监听操作
 * @param create 创建ViewHolder后调用,可用于初始化item
 * @param bind 绑定视图时调用
 */
inline fun <reified vb : ViewBinding> addHeader(
    tag: String = "",
    noinline init: (XProvider<vb, HEADER>.() -> Unit)? = null,
    noinline create: (XProvider<vb, HEADER>.(holder: XHolder<vb>) -> Unit)? = null,
    noinline bind: (XProvider<vb, HEADER>.(holder: XHolder<vb>, data: HEADER) -> Unit)? = null,
)

/**
 * 删除指定头布局
 */
inline fun <reified T : ViewBinding> removeHeader(): R {
    removeHeaderProvider<T>()
    @Suppress("UNCHECKED_CAST")
    return this as R
}

/**
 * 添加脚布局
 * 改方法可动态设置,设置后直接展示。
 *
 * @param tag 备用字段,可用于标记,或数据存储与传递
 * @param init 初始化时回调,可在此设置事件监听操作
 * @param create 创建ViewHolder后调用,可用于初始化item
 * @param bind 绑定视图时调用
 */
inline fun <reified vb : ViewBinding> addFooter(
    tag: String = "",
    noinline init: (XProvider<vb, FOOTER>.() -> Unit)? = null,
    noinline create: (XProvider<vb, FOOTER>.(holder: XHolder<vb>) -> Unit)? = null,
    noinline bind: (XProvider<vb, FOOTER>.(holder: XHolder<vb>, data: FOOTER) -> Unit)? = null,
)

/**
 * 删除指定脚布局
 */
inline fun <reified T : ViewBinding> removeFooter(): R {
    removeFooterProvider<T>()
    @Suppress("UNCHECKED_CAST")
    return this as R
}

/**
 * 设置空布局
 * 改方法需在初始化adapter时设置,设置后并不直接显示。
 * 当adapter无数据时自动显示,有数据时自动隐藏。
 *
 * @param init 初始化时回调,可在此设置事件监听操作
 * @param create 创建ViewHolder后调用,可用于初始化item
 * @param bind 绑定视图时调用
 */
inline fun <reified vb : ViewBinding> setEmpty(
    noinline init: (XProvider<vb, EMPTY>.() -> Unit)? = null,
    noinline create: (XProvider<vb, EMPTY>.(holder: XHolder<vb>) -> Unit)? = null,
    noinline bind: (XProvider<vb, EMPTY>.(holder: XHolder<vb>) -> Unit)? = null,
)

/**
 * 设置缺省页
 * 改方法需在初始化adapter时设置,设置后并不直接显示。
 * 显示与隐藏需调用:
 * @see showDefaultPage
 * @see hintDefaultPage
 *
 * @param tag 备用字段,可用于标记,或数据存储与传递
 * @param init 初始化时回调,可在此设置事件监听操作
 * @param create 创建ViewHolder后调用,可用于初始化item
 * @param bind 绑定视图时调用
 */
inline fun <reified vb : ViewBinding> setDefaultPage(
    tag: Any = "",
    noinline init: (XProvider<vb, DEFAULT_PAGE>.() -> Unit)? = null,
    noinline create: (XProvider<vb, DEFAULT_PAGE>.(holder: XHolder<vb>) -> Unit)? = null,
    noinline bind: (XProvider<vb, DEFAULT_PAGE>.(holder: XHolder<vb>, data: DEFAULT_PAGE) -> Unit)? = null,
)

XAdapter 目录

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

相关阅读更多精彩内容

友情链接更多精彩内容