-
-
Notifications
You must be signed in to change notification settings - Fork 59
入门使用
angcyo edited this page Jul 6, 2020
·
16 revisions
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
//稳定版请使用
implementation 'com.github.angcyo:DslAdapter:x.x.x'
//跟随作者最新版请使用
implementation 'com.github.angcyo:DslAdapter:master-SNAPSHOT'
}
发布的版本号,可以在这里查看. 点击查看
注意:
1.3.0
之后, 将仅支持androidx
.
RecyclerView
(以下简称RV
)是一个高性能
,高扩展
,高度自由
控制的控件, 它不仅仅适用于列表界面
, 普通的界面, 带不带滚动条的界面, 都适合. 而且, 带滚动的界面更是非常适合.
当你使用DslAdapter
的时候, 你会发现,这一切都是那么的简单, 愉快.
DslAdapterItem
(以下简称Item
), 是DslAdapter
组成的最小单位, 各种简单/复杂的Item
组成了整个界面.
所以, 自定义Item
, 分解Item
, 就是您该考虑的事, 剩下的就交给我
吧.
开启我们的魔幻之旅吧.
DslAdapter
的基类就是RecyclerView.Adapter
,
所以你可以像使用RecyclerView.Adapter
一样,使用DslAdapter
. 无任何差异!
recyclerView.adapter = DslAdapter() //简简单单一行, 即可.
// 或者使用 扩展方法
com.angcyo.dsladapter.RecyclerExKt#initDslAdapter
//此扩展方法, 会智能设置RV的LayoutManager, DslItemDecoration和HoverItemDecoration
//扩展方法返回一个DslAdapter对象, 可以保存起来, 供之后使用.
注意
所有对
Item
的新增
删除
隐藏
update
操作, 都是异步的.可以通过
FilterParams
对象参数配置.
只需要继承DslAdapterItem
, 为属性itemLayoutId
指定布局id即可.
class DslDemoItem : DslAdapterItem() {
init {
itemLayoutId = R.layout.item_demo_list //指定布局, 这是必须的.
}
//数据承载
var itemText: CharSequence? = null
//可以定义任意数据类型
//var itemBean:HttpBean? = null //像这样, 只不过数据需要手动控制.
//如:创建/赋值/释放. 如果数据的改变, 还需要更新界面, 请调用item.updateAdapterItem, 或者直接使用系统的adapter.notifyItemChanged, 均可以.
//重写`onItemBind`方法, 实现界面的绑定
open fun onItemBind(
itemHolder: DslViewHolder,
itemPosition: Int,
adapterItem: DslAdapterItem,
payloads: List<Any>
) {
super.onItemBind(itemHolder, itemPosition, adapterItem, payloads)
itemHolder.tv(R.id.text_view).text = itemText //自定义的itemText数据, 绑定到界面.如果itemText改变了, 请调用notifyItemChanged方法更新界面.
}
}
DslViewHolder
只是RecyclerView.ViewHolder
的子类, 简单的做了一些快速方法封装, 并无特殊.
如果你, 不想继承DslAdapterItem
, 也可以如下这样:
val item = DslAdapterItem()
item.itemLayoutId = layoutId
item.itemBindOverride= { itemHolder, _, _, _ ->
itemHolder.tv(R.id.text_view).text = "itemText"
}
有了Item
, 怎么和DslAdapter
关联呢? 这里有3中方式可以关联:
val item = DslAdapterItem()
dslAdapter.addLastItem(item)
dslAdapter.insertItem(index, item)
//此方式需要包裹在`dslAdapter`上下文中.
dslAdapter.apply {
DslAdapterItem()() {
...
}
}
dslAdapter.run {
DslAdapterItem()() {
...
}
}
dslAdapter + DslAdapterItem().apply {
...
} + DslAdapterItem().apply {
...
} + DslAdapterItem().apply {
...
} + DslAdapterItem().apply {
...
}
总结
使用Item
需要注意的3点:
-
itemLayoutId
必须指定 - 重写
onItemBind
或者赋值onItemBindOverride
, 实现界面数据的绑定. 可选 - 追加到界面, 完事.
快去试一下吧, 界面是不是就这样如此轻松地出来了?
接下来, 将会带你体验高级特性
使用方法.