Android lei了lei了 那個 MagicAdapter 它lei了!

MagicAdapter

是一個超級輕量級的能夠快速實現 RecyclerView 複雜適配器的工具庫。 php

show.gif

特性

  • 基於 Kotlin 語言
  • 基於 Databinding
  • 再也不須要維護 Adapter,全局只有一個 MagicAdapter
  • 再也不須要維護 ViewHolder
  • 支持多條目類型
  • 提供了一些基本回調
  • 輕鬆擴展 Header 和 Footer
  • 輕鬆擴展 RecycleView 動畫和事件
  • 沒有反射,效率很高
  • 超級輕量,不足 34 KB
  • 最小兼容 Android SDK : 14

集成

1.在 root's build.gradle 中加入 jcenter 倉庫android

allprojects {
    repositories {
        ...
        jcenter()
    }
}
複製代碼

2.在 app's build.gradle 中開啓 databindinggit

android {
    ...
    dataBinding {
        enabled = true
    }
}
複製代碼

3.在 app's build.gradle 中添加依賴(請使用最新版本)github

dependencies {
    ...
    implementation 'com.xuyefeng:magicadapter:1.0.1'
}
複製代碼

使用

1.建立 RecyclerView item 佈局文件 image_item_layout.xmlapp

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable name="item" type="com.blue.helloadapter.ImageItem" />
    </data>

    <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp">

        <ImageView android:id="@+id/iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" />
    </RelativeLayout>
</layout>
複製代碼

請注意這裏的聲明的 XXXItem 的 name 必須爲 itemide


2.建立 item 佈局文件對應的 XXXItem 即 ImageItem工具

class ImageItem(
        val resId: Int
) : BaseItem() {

    override fun getLayout(): Int = R.layout.image_item_layout

    override fun onBinding(binding: ViewDataBinding) {
        (binding as ImageItemLayoutBinding).apply {
            iv.setImageResource(resId)
            iv.setOnClickListener {
                Toast.makeText(iv.context, "click image on ${getViewHolder()?.adapterPosition}", Toast.LENGTH_SHORT).show()
            }
        }
    }
}
複製代碼

這裏針對 BaseItem 說明一下:佈局

  • 能夠拿到 RecyclerView 綁定的 Adapter
  • 能夠拿到 item 對應的 ViewHolder
  • 能夠拿到 item 對應的 Databinding

3.用一樣的方法建立 TextItem 和 ButtonItem,接下來就能夠添加數據了gradle

val adapter = MagicAdapter()
adapter.addItem(ImageItem(R.drawable.s1))
adapter.addItem(TextItem())
adapter.addItem(ButtonItem())
recyclerView.adapter = adapter
複製代碼

4.若是你須要回調,能夠像這樣動畫

adapter.onItemClickListener = object : OnItemClickListener {
    override fun onItemClick(holder: ItemViewHolder)
          val position = holder.adapterPosition
          val item = holder.item
          val binding = holder.binding
          ...
    }
}
複製代碼

到這裏就結束了,爲一個 RecyclerView 添加複雜適配器原來能夠如此簡單。

最後再附上:github地址傳送門 喜歡就start一下唄

相關文章
相關標籤/搜索