Android Kotlin 数据驱动模板

Android开发人员文档:

1. 搭建环境build.gradle:app

apply plugin: "kotlin-kapt"

android {
    ...
    dataBinding {
        enabled = true
    }
}

2. 使用 layout data绑定你的视图

<?xml version="1.0" encoding="utf-8"?>

<layout>
    <data>
        <variable name="data" type="com.ajanuw.androiddemo.data.MyData" />
    </data>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" android:orientation="vertical">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="22dp"
            android:text="@{data.name}" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="22dp"
            android:text="@{String.valueOf(data.age)}" />

        <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="@{data::onClickFriend}"
            android:text="Button" />
    </LinearLayout>
</layout>

main.kt

package com.ajanuw.androiddemo

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import com.ajanuw.androiddemo.data.MyData
import com.ajanuw.androiddemo.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    // 创建绑定类
    private  lateinit var b: ActivityMainBinding
    lateinit var data: MyData

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        b = DataBindingUtil.setContentView(this, R.layout.activity_main)
        data =  MyData()
        b.data = data
    }
}

myData.kt

package com.ajanuw.androiddemo.data

import android.R.attr.name
import android.view.View
import androidx.databinding.BaseObservable
import androidx.databinding.Bindable
import com.ajanuw.androiddemo.BR


class MyData() : BaseObservable() {
    @Bindable
    var name = "you name"

    @Bindable
    var age = 12

    fun onClickFriend(view:View) {
        name = "hello world"
        age = 22
        notifyPropertyChanged(BR._all)
    }
}
posted @ 2019-11-19 16:45  Ajanuw  阅读(366)  评论(0编辑  收藏  举报