# 入门使用

# 使用JitPack的方式, 引入库.

# 根目录中的 build.gradle

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

# APP目录中的 build.gradle

dependencies {
    //稳定版请使用
    implementation 'com.github.angcyo:DslAdapter:1.0.0'
    //跟随作者最新版请使用
    implementation 'com.github.angcyo:DslAdapter:master-SNAPSHOT'
}

RecyclerView(以下简称RV)是一个高性能,高扩展,高度自由控制的控件, 它不仅仅适用于列表界面, 普通的界面, 带不带滚动条的界面, 都适合. 而且, 带滚动的界面更是非常适合.

当你使用DslAdapter的时候, 你会发现,这一切都是那么的简单, 愉快.

DslAdapterItem(以下简称Item), 是DslAdapter组成的最小单位, 各种简单/复杂的Item组成了整个界面.

所以, 自定义Item, 分解Item, 就是您该考虑的事, 剩下的就交给吧.


开启我们的魔幻之旅吧.

# DslAdapter

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

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

# DslAdapterItem

# 实现一个简单的DslAdapterItem

只需要继承DslAdapterItem, 为属性itemLayoutId指定布局id即可.

class DslDemoItem : DslAdapterItem() {
    init {
        itemLayoutId = R.layout.item_demo_list //指定布局, 这是必须的.
    }

    var itemText: CharSequence? = null

    //重写`onItemBind`方法, 实现界面的绑定
    override fun onItemBind(
        itemHolder: DslViewHolder,
        itemPosition: Int,
        adapterItem: DslAdapterItem
    ) {
        super.onItemBind(itemHolder, itemPosition, adapterItem)
        itemHolder.tv(R.id.text_view).text = itemText
    }
}

DslViewHolder只是RecyclerView.ViewHolder的子类, 简单的做了一些快速方法封装, 并无特殊.

如果你, 不想继承DslAdapterItem, 也可以如下这样:

val item = DslAdapterItem()
item.itemLayoutId = layoutId
item.onItemBindOverride = { 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. 追加到界面, 完事.



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