{"id":21769988,"url":"https://github.com/angcyo/dsladapter","last_synced_at":"2025-04-10T06:30:20.543Z","repository":{"id":42233927,"uuid":"201440286","full_name":"angcyo/DslAdapter","owner":"angcyo","description":":fire: Android Kotlin时代的Adapter, Dsl 的形式使用 RecyclerView.Adapter, 支持折叠展开, 树结构,悬停,情感图状态切换, 加载更多, 多类型Item,侧滑菜单等","archived":false,"fork":false,"pushed_at":"2024-10-09T04:22:02.000Z","size":35837,"stargazers_count":718,"open_issues_count":6,"forks_count":62,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-03T04:11:27.754Z","etag":null,"topics":["adapter","android","async","diff","drag","dsl","flod","group","kotlin","light","load-more","multi-select","multi-type","recyclerview","single-select","slide-delete","slide-menu","slide-select","state","tree"],"latest_commit_sha":null,"homepage":"https://github.com/angcyo/HoverItemDecoration","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/angcyo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":"https://gitee.com/angcyo/res/raw/master/code/all_in2.jpg"}},"created_at":"2019-08-09T09:51:03.000Z","updated_at":"2025-03-31T15:51:52.000Z","dependencies_parsed_at":"2024-12-31T21:04:37.448Z","dependency_job_id":"4deae9ec-f697-41b1-b475-963fb85503fd","html_url":"https://github.com/angcyo/DslAdapter","commit_stats":null,"previous_names":[],"tags_count":57,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angcyo%2FDslAdapter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angcyo%2FDslAdapter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angcyo%2FDslAdapter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angcyo%2FDslAdapter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/angcyo","download_url":"https://codeload.github.com/angcyo/DslAdapter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248168096,"owners_count":21058767,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adapter","android","async","diff","drag","dsl","flod","group","kotlin","light","load-more","multi-select","multi-type","recyclerview","single-select","slide-delete","slide-menu","slide-select","state","tree"],"created_at":"2024-11-26T14:10:52.513Z","updated_at":"2025-04-10T06:30:20.489Z","avatar_url":"https://github.com/angcyo.png","language":"Kotlin","funding_links":["https://gitee.com/angcyo/res/raw/master/code/all_in2.jpg"],"categories":[],"sub_categories":[],"readme":"# DslAdapter\n\n[![API](https://img.shields.io/badge/API-12%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=12) ![GitHub branch checks state](https://img.shields.io/github/checks-status/angcyo/DslAdapter/master) ![GitHub](https://img.shields.io/github/license/angcyo/DslAdapter) [![AndroidX](https://img.shields.io/badge/androidx-100%25-blue)](https://developer.android.google.cn/jetpack/androidx) ![GitHub top language](https://img.shields.io/github/languages/top/angcyo/DslAdapter) ![JitPack](https://img.shields.io/jitpack/v/github/angcyo/DslAdapter)\n\n![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/angcyo/DslAdapter) ![GitHub repo size](https://img.shields.io/github/repo-size/angcyo/DslAdapter) ![GitHub last commit](https://img.shields.io/github/last-commit/angcyo/DslAdapter) ![GitHub issues](https://img.shields.io/github/issues/angcyo/DslAdapter) ![GitHub Repo stars](https://img.shields.io/github/stars/angcyo/DslAdapter?style=social) ![GitHub forks](https://img.shields.io/github/forks/angcyo/DslAdapter?style=social)\n\n`Kotlin`时代的`Adapter`.\n\n`Dsl` 的形式使用 `RecyclerView.Adapter`, 支持情感图状态切换, 加载更多, 多类型`Item`等\n\n[Gitee仓库地址](https://gitee.com/angcyo/DslAdapter)\n\n[文档地址](https://angcyo.gitee.io/doc)\n\n# 有何用?\n\n只有一个目的`高效开发`, 一切都是为了`效率`.\n\n可能以前写界面, 还在为了继承某个`xxActivity`or`xxFragment`, `xml`布局到底使用`xxLayout`而烦扰. \n\n有了`DslAdapter`, 一切皆是`RecyclerView`的天下.\n\n你所能见到的`普通界面`,`列表界面`,`带滚动的界面`等等, 都可以使用`DslAdapter`轻松高效实现.\n\n**注意:** 是`轻松高效实现`,`轻松高效实现`,`轻松高效实现`.\n\n```kotlin\n//普通界面渲染\ndslAdapter.render {\n    this + 普通1Item()\n    this + 普通2Item()\n    this + 普通3Item()\n    ...\n    底部普通Item()()\n}\n\n//列表界面渲染\ndslAdapter.render {\n    刷新指示器Item()()\n    头部Item()()\n    轮播图Item()()\n    列表Item()()\n    列表Item()()\n    列表Item()()\n    ...\n    尾部Item()()\n    加载更多Item()()\n}\n\n//普通界面和列表界面 如出一辙, 一点也不用惊讶,后面还有更刺激的.\n\n//and so on\n```\n\n你没有看错, 就是这么`简单`, 就是这么`高效`. 一个字`...爽 爽 爽...`\n\n任意界面, 都是由若干个`相同Item`or`不相同Item`组合而成.\n\n**您所要做的就是:**\n\n1. 将界面拆分成`若干个Item`\n2. 继承`DslAdapterItem`实现对应的`Item`即可\n\n\u003e 魅力无极限, 期待您的表现.\n\n# 特性\n1. `全网最轻量`的`多类型Item`实现方法 (只需要关心`布局`+`逻辑`)\n2. 支持`情感图状`态(空布局 加载中 错误异常等)切换,完美支持自定义扩展 (也是一个`Item`)\n3. 支持`加载更多` 完美支持自定义扩展 (也是一个`Item`)\n4. 支持分组`折叠` (类似QQ联系人好友分组,展开和折叠的效果) \n5. 支持Item`悬停` (类似QQ联系人好友分组,悬停的效果)\n6. 支持常规的`分割线` (一会儿占满屏幕 一会儿有点边距的效果)\n7. 支持单`选/多选` (支持固定选项)\n8. 支持某一个Item更新时,`定向更新`多个其他Item (在表单编辑界面,很有用.)\n9. 支持`群组`功能 (指定连续的几个相同/不同的item为一组)\n10. 支持`滑动选择`(手指拖拽, 就可以选中范围内item)\n11. 支持`拖拽排序` `侧滑删除` (注意不是侧滑菜单)\n12. 支持`树结构`类似于`idea`中的文件列表目录结构 (支持异步加载)\n13. 支持`左右侧滑菜单`(`2.4.0`后)\n14. 支持`DataBinding`(`3.0.0`后)\n15. 支持`ViewBinding`([参考示例](https://github.com/angcyo/DslAdapter/blob/master/Sample/src/main/java/com/angcyo/dsladapter/dsl/DslViewBindingItem.kt))\n16. 支持`Item动画`(`4.3.0`后)\n17. 支持将`DslAdapterItem`添加到任意`ViewGroup`中(`5.1.0`后)\n18. 支持单独将`DslAdapterItem`的`itemBind`逻辑绑定在任意`View`中(`5.1.0`后)\n19. 新增`IDslItem`,并支持自动初始化(`6.0.0`后 `minApi\u003e=14`)\n\n# 功能展示\n\n[情感图切换](https://github.com/angcyo/DslAdapter/wiki/%E6%83%85%E6%84%9F%E5%9B%BE%E7%8A%B6%E6%80%81%E5%88%87%E6%8D%A2)|[加载更多](https://github.com/angcyo/DslAdapter/wiki/%E5%8A%A0%E8%BD%BD%E6%9B%B4%E5%A4%9A%E5%8A%9F%E8%83%BD)\n:---:|:---:\n![情感图切换](png/gif_adapter_status.gif)|![加载更多](png/gif_load_more.gif)\n\n[折叠展开](https://github.com/angcyo/DslAdapter/wiki/%E6%8A%98%E5%8F%A0%E5%92%8C%E5%B1%95%E5%BC%80) | [群组功能](https://github.com/angcyo/DslAdapter/wiki/%E7%BE%A4%E7%BB%84%E5%8A%9F%E8%83%BD)\n:---:|:---:\n![折叠展开](png/gif_linear_group.gif)|![群组功能](png/gif_grid_group.gif)\n\n[单选](https://github.com/angcyo/DslAdapter/wiki/%E5%8D%95%E9%80%89-%E5%A4%9A%E9%80%89-%E6%BB%91%E5%8A%A8%E9%80%89%E6%8B%A9)|[多选](https://github.com/angcyo/DslAdapter/wiki/%E6%8B%96%E6%8B%BD%E6%8E%92%E5%BA%8F%E5%92%8C%E4%BE%A7%E6%BB%91%E5%88%A0%E9%99%A4)\n:---:|:---:\n![单选](png/gif_single_selector.gif)|![多选](png/gif_multi_selector.gif)\n\n[滑动选择](https://github.com/angcyo/DslAdapter/wiki/%E5%8D%95%E9%80%89-%E5%A4%9A%E9%80%89-%E6%BB%91%E5%8A%A8%E9%80%89%E6%8B%A9)|[拖拽排序](https://github.com/angcyo/DslAdapter/wiki/%E6%8B%96%E6%8B%BD%E6%8E%92%E5%BA%8F%E5%92%8C%E4%BE%A7%E6%BB%91%E5%88%A0%E9%99%A4)\n:---:|:---:\n![滑动选择](png/gif_slide_selector.gif)|![拖拽排序](png/gif_drag.gif)\n\n[侧滑删除](https://github.com/angcyo/DslAdapter/wiki/%E6%8B%96%E6%8B%BD%E6%8E%92%E5%BA%8F%E5%92%8C%E4%BE%A7%E6%BB%91%E5%88%A0%E9%99%A4)|[树结构](https://github.com/angcyo/DslAdapter/wiki/%E6%A0%91%E7%BB%93%E6%9E%84)\n:---:|:---:\n![侧滑删除](png/gif_slide.gif)|![树结构](png/gif_tree.gif)\n\n[侧滑菜单](https://github.com/angcyo/DslAdapter/wiki/%E4%BE%A7%E6%BB%91%E8%8F%9C%E5%8D%95)|[DslItem](https://github.com/angcyo/DslItem)\n:---:|:---:\n![侧滑菜单](png/gif_swipe_menu.gif)|![DslItem](https://gitee.com/angcyo/DslItem/raw/master/png/item.png)\n\n# 实战案例\n\n多类型可复用内嵌`Item`|支持上下`Item`流的逻辑关联\n:---:|:---:\n![多类型可复用内嵌`Item`](png/sample_detail_1.png)|![支持上下`Item`流的逻辑关联](png/sample_detail_2.png)\n\nIM界面也能完美胜任|可动态控制`Item`的表单界面\n:---:|:---:\n![IM界面也能完美胜任](png/sample_detail_3.png)|![可动态控制`Item`的表单界面](png/sample_form_1.png)\n\n# 疑问\n\n## 如何实现最后一个`Item`撑满`RecycleView`底部的剩余空间(如果有)?\n\n需要自定义`ViewGroup`, 在`onLayout`方法中, 计算出`RecycleView`底部的剩余空间, 赋值给`LayoutParams`即可.\n\n# 使用`JitPack`的方式, 引入库.\n\n## 根目录中的 `build.gradle`\n\n```kotlin\nallprojects {\n    repositories {\n        ...\n        maven { url 'https://jitpack.io' }\n    }\n}\n```\n\n## APP目录中的 `build.gradle`\n\n```kotlin\ndependencies {\n    //androidx(推荐)\n    implementation 'com.github.angcyo:DslAdapter:6.0.4'\n    //支持DataBinding\n    implementation 'com.github.angcyo:DslAdapter:3.0.0-binding'\n\n    //support版请使用(不保证及时更新)\n    implementation 'com.github.angcyo:DslAdapter:1.2.0'\n    //跟随作者最新版请使用\n    implementation 'com.github.angcyo:DslAdapter:master-SNAPSHOT'\n}\n```\n发布的版本号,可以在这里查看. [点击查看](https://github.com/angcyo/DslAdapter/tags)\n\n# 功能使用\n\n请访问 [**WIKI文档**](https://github.com/angcyo/DslAdapter/wiki) 查看详情说明.\n\n# 更新日志\n\n[点击查看](https://github.com/angcyo/DslAdapter/blob/androidx/CHANGELOG.md)\n\n# DslItem\n\n正在整理的[DslItem](https://github.com/angcyo/DslItem)库, 囊括项目开发中能够见到的`Item`, 皆旨让开发更高效. 欢迎PR.\n\n# 下载体验\n\n扫码安装\n\n![扫码安装](png/qrcode1.png)\n\n# License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fangcyo%2FDslAdapter.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fangcyo%2FDslAdapter?ref=badge_large)\n\n---\n**群内有`各(pian)种(ni)各(jin)样(qun)`的大佬,等你来撩.**\n\n# 联系作者\n\n[点此QQ对话](http://wpa.qq.com/msgrd?v=3\u0026uin=664738095\u0026site=qq\u0026menu=yes)  `该死的空格`    [点此快速加群](https://shang.qq.com/wpa/qunwpa?idkey=cbcf9a42faf2fe730b51004d33ac70863617e6999fce7daf43231f3cf2997460)\n\n[开源地址](https://github.com/angcyo/DslAdapter)\n\n![扫码进群](https://raw.githubusercontent.com/angcyo/res/master/code/all_in1.jpg)\n\n![给点鼓励](https://raw.githubusercontent.com/angcyo/res/master/code/all_in2.jpg)\n\n\n# 趋势\n\n[![angcyo/DslAdapter](https://starchart.cc/angcyo/DslAdapter.svg)](https://starchart.cc/angcyo/DslAdapter)\n\n# 👏 感谢\n[![angcyo/DslAdapter](https://reporoster.com/stars/angcyo/DslAdapter)](https://github.com/angcyo/DslAdapter/stargazers)\n\n## 访问统计\n\u003cimg height=\"30px\" src = \"https://profile-counter.glitch.me/DslAdapter/count.svg\" alt =\"Loading\"\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangcyo%2Fdsladapter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fangcyo%2Fdsladapter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangcyo%2Fdsladapter/lists"}