博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
你还在用Adapter和ViewHolder写RecyclerView吗?Out了!
阅读量:6813 次
发布时间:2019-06-26

本文共 2888 字,大约阅读时间需要 9 分钟。

Yaksa

一个轻量级的RecyclerView工具,让你像Javascript一样渲染Item.

众所周知,熟练使用RecyclerView展示列表数据已经是每个Android开发者必备的能力,然而,RecyclerView仍然有它的不足, 那就是过于繁琐,相信每个开发者都有过这样的经历,我们为了展示一个只有单一类型的简单的列表,需要创建一个Adapter, 需要创建一个ViewHolder,而对于具有多个类型的稍微复杂的列表,我们不但需要创建Adapter,同时还要创建多个ViewHolder..

我们一次又一次不断的重复着这样无聊的工作,显得那么的麻木不仁

然而,生活不止眼前的苟且,还有诗和远方!

让我们一起和噩梦一样的Adapter和ViewHolder说声再见,一起来拥抱Yaksa吧!

Yaksa(夜叉), 提高16点敏捷  15%攻击速度  10%移动速度

Talk is cheap, show me the code

渲染一个Linear列表:

recycler_view.linear {    item {        HeaderItem("This is a Header")    }    itemDsl(index = 0) {        xml(R.layout.header_item)        render {            it.tv_header.text = "This is a dsl Header"            it.setOnClickListener { toast("DSL Header Clicked") }        }    }    data.forEach { each ->        itemDsl {            xml(R.layout.list_item)            render {                it.textView.text = each.title            }        }    }}复制代码

就是这样,没有Adapter,也没有ViewHolder,你只需要专心的渲染Item就好了!

效果图:

渲染一个Grid列表:

rv_list.grid {    spanCount(SPAN_COUNT)        item {        HeaderItem("This is a Header")    }        itemDsl(index = 0) {        gridSpanSize(SPAN_COUNT)                xml(R.layout.header_item)        render {            it.tv_header.text = "This is a dsl Header"            it.setOnClickListener { toast("DSL Header Clicked") }        }    }        data.forEach { each ->        itemDsl {            xml(R.layout.list_item)            render {                it.textView.text = each.title            }            renderX { position, it ->                it.setOnClickListener { toast("Clicked $position") }            }        }    }}复制代码

效果图:

瀑布流? 没问题:

rv_list.stagger {    spanCount(3)        item {        HeaderItem("This is a Header")    }        itemDsl(index = 0) {        staggerFullSpan(true)                xml(R.layout.header_item)        render {            it.tv_header.text = "This is a dsl Header"            it.setOnClickListener { toast("DSL Header Clicked") }        }    }        data.forEach { each ->        item {            ListItem(each.title, HEIGHTS[Random().nextInt(HEIGHTS.size)].px)        }    }}复制代码

效果图:

其余的Header,Footer,多种type类型更是不在话下,而且重要的是,这些都不需要你写任何的ViewHolder和Adapter

现在就开始装备夜叉吧,开启你的超神之路!

Github地址:

License

Copyright 2018 Season.ZlcLicensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License at   http://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.```![yaksa.png](https://upload-images.jianshu.io/upload_images/1008453-bcdfe27bf44ebd16.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)复制代码

转载地址:http://lvzzl.baihongyu.com/

你可能感兴趣的文章
poj-2049 Finding Nemo *
查看>>
模块化编程本质探讨
查看>>
利用博客与视频分享和交流知识和经验
查看>>
知道二叉树前序和中序序列打印后序序列
查看>>
js操作dom对象
查看>>
由于未能创建 Microsoft Visual C# 2008 编译器,因此未能打开项目
查看>>
Windows2003服务器安全配置:先关闭不需要的端口(转自)
查看>>
HDU1247 Hat’s Words 【trie树】
查看>>
iOS开发--动画篇之layout动画深入
查看>>
nullpointerxception——处理思路
查看>>
WorldWind源码剖析系列:视景体类Frustum
查看>>
(转)完整java开发中JDBC连接数据库代码和步骤
查看>>
Redis Lua脚本原理
查看>>
有时间测试dism
查看>>
/Users/alamps/AndroidStudioProjects/Demo10ScrollView
查看>>
【Swift】iOS UICollectionView 计算 Cell 大小的陷阱
查看>>
为什么我刚发表的文章变成了“待审核”,csdn有没有官方解释啊
查看>>
Matplotlib 工具包 使用教程索引
查看>>
2016第29周三
查看>>
Maven 与 IntelliJ IDEA 的完美结合
查看>>