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
    评论
K Grid Adapter是一种用Kotlin语言编写的适配器,用于在GridView中显示数据。它可以帮助开发者更快速、更方便地实现GridView的数据绑定和显示。下面是一个简单的Kotlin Grid Adapter实现步骤: 1. 创建GridView子项布局,例如grid_view.xml。 2. 在Activity中创建GridView,并设置适配器。 3. 创建实体类,例如GridItem。 4. 创建适配器类,例如GridAdapter,继承自BaseAdapter。 5. 在适配器中实现getView()方法,用于绑定数据和显示GridView子项。 6. 在MainActivity中设置GridView的点击事件。 下面是一个简单的Kotlin Grid Adapter实现范例: ``` // 实体类 data class GridItem(val image: Int, val name: String) // 适配器类 class GridAdapter(private val context: Context, private val data: List<GridItem>) : BaseAdapter() { override fun getCount(): Int { return data.size } override fun getItem(position: Int): Any { return data[position] } override fun getItemId(position: Int): Long { return position.toLong() } override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { var view = convertView val holder: ViewHolder if (view == null) { view = LayoutInflater.from(context).inflate(R.layout.grid_view, parent, false) holder = ViewHolder(view) view.tag = holder } else { holder = view.tag as ViewHolder } val item = data[position] holder.imageView.setImageResource(item.image) holder.textView.text = item.name return view!! } private class ViewHolder(view: View) { val imageView: ImageView = view.findViewById(R.id.image_view) val textView: TextView = view.findViewById(R.id.text_view) } } // MainActivity中设置GridView的适配器和点击事件 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val gridView = findViewById<GridView>(R.id.grid_view) val data = listOf( GridItem(R.drawable.image1, "Item 1"), GridItem(R.drawable.image2, "Item 2"), GridItem(R.drawable.image3, "Item 3"), GridItem(R.drawable.image4, "Item 4"), GridItem(R.drawable.image5, "Item 5"), GridItem(R.drawable.image6, "Item 6") ) val adapter = GridAdapter(this, data) gridView.adapter = adapter gridView.setOnItemClickListener { parent, view, position, id -> Toast.makeText(this, "Clicked item ${position + 1}", Toast.LENGTH_SHORT).show() } } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值