Kotlin 入门

  • 导入布局中所有控件属性

    1
    import kotlinx.android.synthetic.main.<布局>.*
  • 实验模式包含LayoutContainer`Parcelable`

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    androidExtensions {
    experimental = true
    }

    import kotlinx.android.extensions.LayoutContainer

    class ViewHolder(override val containerView: View) : ViewHolder(containerView), LayoutContainer {
    fun setup(title: String) {
    itemTitle.text = "Hello World!"
    }
    }
  • View缓存策略,默认为HASH_MAP,findViewById()被调用一次

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    androidExtensions {
    defaultCacheImplementation = "HASH_MAP" // also SPARSE_ARRAY, NONE
    }

    可以通过注解改变策略
    @ContainerOptions(cache = CacheImplementation.NO_CACHE)
    fun MyActivity.a() {
    // findViewById() will be called twice
    textView.text = "Hidden view"
    textView.visibility = View.INVISIBLE
    }
  • Parcelable

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import kotlinx.android.parcel.Parcelize

    @Parcelize
    class User(val firstName: String, val lastName: String, val age: Int): Parcelable

    序列化读写
    @Parcelize
    data class Value(val firstName: String, val lastName: String, val age: Int) : Parcelable {
    private companion object : Parceler<User> {
    override fun User.write(parcel: Parcel, flags: Int) {
    // Custom write implementation
    }

    override fun create(parcel: Parcel): User {
    // Custom read implementation
    }
    }
    }
  • @Parcelize支持类型

  • 自定义序列号映射对象

    1
    2
    3
    4
    5
    6
    7
    8
    9
    class ExternalClass(val value: Int)

    object ExternalClassParceler : Parceler<ExternalClass> {
    override fun create(parcel: Parcel) = ExternalClass(parcel.readInt())

    override fun ExternalClass.write(parcel: Parcel, flags: Int) {
    parcel.writeInt(value)
    }
    }
  • 使用@TypeParceler @WriteWith引用自定义序列号映射对象

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Class-local parceler
    @Parcelable
    @TypeParceler<ExternalClass, ExternalClassParceler>()
    class MyClass(val external: ExternalClass)

    // Property-local parceler
    @Parcelable
    class MyClass(@TypeParceler<ExternalClass, ExternalClassParceler>() val external: ExternalClass)

    // Type-local parceler
    @Parcelable
    class MyClass(val external: @WriteWith<ExternalClassParceler>() ExternalClass)
willkernel wechat
关注微信公众号
帅哥美女们,请赐予我力量吧!