一个使用 Kotlin 开发的简单 Android 库 - KDroid

631 阅读2分钟
原文链接: github.com

license kotlin android support

KDroid 是用一个用 Kotlin 写的轻量级 Android 库。希望通过 KDroid 来使得 Android 的开发更加方便快捷。

Kotlin 是一门运行于 JVM 上的语言,完全兼容 Java,所以不用担心兼容性问题。

KDroid 目前有以下几个库:

  • VAdapter:打造简单通用的 Adapter
  • Moc:生存随机的 mock 数据

VAdapter vadapter

在 module 的 build.gradle 中添加依赖

implementation 'cn.thens.kdroid:vadapter:0.1.1'

//需要导入 RxJava2
implementation "io.reactivex.rxjava2:rxjava:2.1.6"
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'

首先,创建一个 lazy Adapter:

  • RecyclerView 使用 VRecyclerAdapter
  • ListView, GridView, Spinner 使用 VListAdapter
  • ViewPager 使用 VPagerAdapter
private val vAdapter: VRecyclerAdapter<Data> by lazy {
    object : VRecyclerAdapter<Data>() {
        override fun createHolder(viewGroup: ViewGroup, viewType: Int): VAdapter.Holder<Data> {
            return viewGroup.createHolder(R.layout.item) {
                vTitle.text = it.title
                vDescription.text = it.description
            }
        }
    }
}

在 Activity 的 onCreate 中初始化 RecyclerView(或 ListView, ViewPager 等):

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    recyclerView.layoutManager = LinearLayoutManager(this)
    recyclerView.adapter = vAdapter
}

在得到数据之后,再进行填充,并刷新视图:

vAdapter.refill(elements); 

下面是 vadapter 库里面的几个主要类的继承关系图:

MutableList<E>
|-- VAdapter<E>
|   |-- VRecyclerAdapter<E>
|   |-- VBaseAdapter<E>
|   |   |-- VListAdapter<E>
|   |   |-- VPagerAdaper<E>

可以看到它们都继承了 MutableList。因此我们可以对 VAdapter 进行列表一样的增删改操作。但操作完成之后需要调用 VAdapter.notifyChanged() 来刷新视图。

在使用 VRecyclerAdpater 时,我强烈建议使用 notifyChanged() 而不是 notifyDataSetChanged() 来刷新,因为 VRecyclerAdapter.notifyChanged() 使用了 DiffUtil 实现局部刷新,效率更高。

VAdapter.refill() 里面已经调用了 notifyChanged(),无需再次调用。

Moc moc

Moc 库用来生产随机的moc数据。

在 module 的 build.gradle 中添加依赖

implementation 'cn.thens.kdroid:moc:0.1.1'

//需要导入 Gson
implementation 'com.google.code.gson:gson:2.8.2'

通过注解来表示要生成的随机数据,并通过调用 Moc.create() 来创建实例:

data class YaData(
        @MocBool(false) val isFollowed: Boolean,
        @MocString("mockedTitle", "Celavee", "Balabala") val title: String,
        @MocString("cool", "too") val description: String,
        @MocString("dd", "ee", "tt") val detail: String
)

val data: YaData = Moc.create(YaData::class.java)

Moc 中含有的注解:

  • MocBool:生成随机的 boolean
  • MocString:生成随机的 String
  • MocInt:生成随机的 int
  • MocLong:生成随机的 long
  • MocFloat:生成随机的 float
  • MocDouble:生成随机的 double
  • MocList:生存随机大小的 ArrayList