极简Kotlin RecyclerView Adapter库:SmartAdapter

时间:2021-7-21 作者:qvyue

SmartAdapter

使用Kotlin编写的极简使用RecyclerView Adapter,无需创建adapter,直接调用RecyclerView.bind().build() 即可使用。build()调用后,返回创建好的SmartAdapter,后续更新列表操作通过SmartAdapter实例。

极简Kotlin RecyclerView Adapter库:SmartAdapter
with_diff.gif
极简Kotlin RecyclerView Adapter库:SmartAdapter
without_diff.gif

导入 :

Android:

​ implementation “com.ayvytr:smart-adapter:0.1.0”

Androidx:

​ implementation “com.ayvytr:smart-adapter-androidx:0.1.0”

Javadoc

使用:

//单个item type:
recycler_view.bind(list, R.layout.item) { item: Item ->    
    item_text.text = item.value    
}}
//创建adapter,最后一步一定要调用!
.build()
//多种 item view:
recycler_view.bind(list, R.layout.item, 1) { item: Item ->
            item_text.text = item.value
        }
            //添加item view的方法
            .map(R.layout.item_second, 2) { item: Item ->
                item_second_text.text = item.value
            }
            .map(R.layout.item_custom, 3) { item: Item ->
                item_custom_text.text = item.value
            }
            .map(BindMap4())
            //添加自定义DiffCallback
            //            .diff({ oldItem, newItem -> oldItem.type == newItem.type },
            //                  { oldItem, newItem -> oldItem.value == newItem.value },
            //                  { oldItem, newItem ->
            //                      if (oldItem.value != newItem.value) {
            //                          newItem
            //                      } else null
            //                  },
            //                  { holder, item, payloads -> holder.bind(item) })
            //另一种添加自定义DiffCallback的方法
            .diff(Diff())
            //如何在你的item获取item view type 
            .type { it.type }
            //item click listener
            .click { item: Item, i: Int ->
                toast("clicked $i $item")
            }
            //item long click listener
            .longClick { item: Item, i: Int ->
                toast("long clicked $i $item")
            }
            //取消DiffCallback
            //.cancelDiff()
            //创建adapter,最后一步一定要调用!
            .build()
            
class Diff : SmartDiffCallback({ oldItem, newItem -> oldItem === newItem },
                                     { oldItem, newItem -> oldItem === newItem && oldItem.value == newItem.value },
                                     { item: Item, item1: Item -> },
                                     { param: Any, item: Item, mutableList: MutableList -> }
)

class BindMap4 : SmartContainer(R.layout.item_4, 4, { item_text_4.text = it.value }) {
}

别忘了点个Star吧!O(∩_∩)O哈哈~

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。