Kotlin 封装Adapter,使用DSL极其简洁的方式穿件Adapter,同时支持多类型

# KAdapter

KAdapter 是Kotlin版本RecyclerView Adapter的封装,使用DSL创建Adapter,使用更简洁的方式创建

github Demo地址 别忘给个star

Usage

#### 当前最新版本 1.0.2

#### 引库

        

implementation 'cn.ustory.qy:kadapter:1.0.2'

1. 创建

      - 1. 最简单创建

           

     var simpleAdapter: KotlinAdapter<Menu> = KAdapter(R.layout.menu_list) {

                   bindData { type, vh, data ->
                        vh.itemView.tv_title.text = data.name
                   }
     }


      或


           

  var myAdapter: KotlinAdapter<Person> = KAdapter {
        layout {
                 R.layout.list_item
        }

        bindData { vh, data ->
                 vh.itemView.tv_text.text = data.name
        }
  }


      
      
      - 2. 带数据创建
      
      
       

var myAdapter: KotlinAdapter<Person> = KAdapter {

          layout {
              R.layout.list_item
          }

          data {
              arrayListOf(Person("张三"), Person("李四"))
          }

          bindData { vh, data ->
               vh.itemView.tv_text.text = data.name
          }
}


      
      
      - 3. 带header footer创建
      
      
       

var myAdapter: KotlinAdapter<Person> = KAdapter {

          layout {
              R.layout.list_item
          }

          data {
              arrayListOf(Person("张三"), Person("李四"))
          }

          bindData { vh, data ->
               vh.itemView.tv_text.text = data.name
          }
          
          header(R.layout.header){
              it.tv_text.text = "My name is Header"
          }
          
          footer(R.layout.footer){
              it.tv_text.text = "My name is Footer"
          }
      }

      - 4. 实现多类型布局(效果图如下)

   效果图

       

var mutilAdapter: KotlinAdapter<Menu> = KAdapterFactory.KAdapter {

            multiLayout {
                layout {
                    R.layout.red_layout
                }
                layout {
                    R.layout.yellow_layout
                }
                layout {
                    R.layout.blue_layout
                }
                layout {
                    R.layout.green_layout
                }
            }


            bindData { type, vh, data ->
                when (type) {
                    R.layout.red_layout -> vh.itemView.tv_item.text = data.name
                    R.layout.yellow_layout -> vh.itemView.tv_item.text = data.name
                    R.layout.blue_layout -> vh.itemView.tv_item.text = data.name
                    R.layout.green_layout -> vh.itemView.tv_item.text = data.name
                }
            }
        }


2. 使用
      
        1. 直接使用
        
         

 //设置点击事件
           myAdapter.onItemClick { position, view -> Toast.makeText(this, "position=" + position, Toast.LENGTH_SHORT).show() }
           myAdapter into recyclerView
        
 

       2. 重新设置新值使用
        
          

           myAdapter.data{
               arrayListOf(Person("John"), Person("Bob"))
           }
           
           myAdapter.header(R.layout.header){
               it.tv_text.text = "My name is Header"
           }
           
           myAdapter.footer(R.layout.footer){
               it.tv_text.text = "My name is Footer"
           }
           
           myAdapter into recyclerView

        3. 多类型使用

         

           //原始数据
           var datas = arrayListOf(Menu("Android"), Menu("IOS"), Menu("微信小程序"), Menu("HTML程序"))

           mutilAdapter.data(datas) {
               update(0,R.layout.red_layout) //设置第一个元素类型为red_layout
               update(0..1,R.layout.yellow_layout) //设置0 到 1的类型为yellow_layout,如果之前设置过0,会覆盖之前的设置的类型
               update(2,R.layout.blue_layout)
               update(3,R.layout.green_layout)
               insert(2,R.layout.red_layout,"Python")//在第2个位置后插入一个red_layout类型数据,
           }

           // 对新增red_layout类型数据单独设置,新数据使用backupData字段,因为新数据类型不确定
           mutilAdapter.bindData(R.layout.red_layout){
              type, vh, data, backupData ->
              backupData?.let {
                  vh.itemView.tv_item.text = backupData as String
              }
           }
           // 对原始旧数据重新设置,原始数据使用data字段
           mutilAdapter.bindData(R.layout.green_layout){
              type, vh, data, backupData ->
              data?.let {
                  vh.itemView.tv_item.text = "新·"+data.name
              }
           }

           mutilAdapter into recyclerView

 ### 多布局 实现主要是通过update来单个和批量设置数据类型,使用insert可以在指定位置插入一条新的数据,可以指定类型
        

github Demo地址 别忘给个star

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值