Skip to content

入门使用

angcyo edited this page Jul 6, 2020 · 16 revisions

使用JitPack的方式, 引入库.

根目录中的 build.gradle

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

APP目录中的 build.gradle

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

DslAdapter的基类就是RecyclerView.Adapter, 所以你可以像使用RecyclerView.Adapter一样,使用DslAdapter. 无任何差异!

recyclerView.adapter = DslAdapter() //简简单单一行, 即可.

// 或者使用 扩展方法

com.angcyo.dsladapter.RecyclerExKt#initDslAdapter
//此扩展方法, 会智能设置RV的LayoutManager, DslItemDecoration和HoverItemDecoration
//扩展方法返回一个DslAdapter对象, 可以保存起来, 供之后使用.

注意

所有对Item新增 删除 隐藏 update操作, 都是异步的.

可以通过FilterParams对象参数配置.

DslAdapterItem

实现一个简单的DslAdapterItem

只需要继承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中方式可以关联:

1. 直接调用addLastItem或者同类型方法insertItem

val item = DslAdapterItem()
dslAdapter.addLastItem(item)
dslAdapter.insertItem(index, item)

2. 使用[invoke]运算符重载方式 追加[DslAdapterItem], 如下

//此方式需要包裹在`dslAdapter`上下文中.
dslAdapter.apply {
    DslAdapterItem()() {
        ...
    }
}
dslAdapter.run {
    DslAdapterItem()() {
        ...
    }
}

3. 使用[plus]运算符重载方式 追加[DslAdapterItem]

dslAdapter + DslAdapterItem().apply {
    ...
} + DslAdapterItem().apply {
    ...
} + DslAdapterItem().apply {
    ...
} + DslAdapterItem().apply {
    ...
}

总结

使用Item需要注意的3点:

  1. itemLayoutId必须指定
  2. 重写onItemBind或者赋值onItemBindOverride, 实现界面数据的绑定. 可选
  3. 追加到界面, 完事.



快去试一下吧, 界面是不是就这样如此轻松地出来了? 接下来, 将会带你体验高级特性使用方法.