在 Kotlin 中,數(shù)據(jù)綁定庫允許您輕松地將 UI 組件與數(shù)據(jù)源進(jìn)行雙向綁定。要實(shí)現(xiàn)雙向綁定,請按照以下步驟操作:
在您的 build.gradle
文件中,添加以下依賴項(xiàng)以啟用數(shù)據(jù)綁定:
android {
...
dataBinding {
enabled = true
}
}
dependencies {
...
dataBinding 'androidx.databinding:databinding:4.2.0'
}
請注意,版本號可能會有所不同。請查閱 Maven 倉庫 以獲取最新版本。
創(chuàng)建一個簡單的 Java 或 Kotlin 類,用作數(shù)據(jù)源。例如,創(chuàng)建一個名為 User
的類:
data class User(val name: String, val age: Int)
在您的布局文件中,使用 <layout>
標(biāo)簽包裝您的根視圖。然后,使用 <data>
標(biāo)簽定義要綁定的變量。例如,創(chuàng)建一個名為 user_layout.xml
的布局文件:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="com.example.User" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{String.valueOf(user.age)}" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Update Name"
android:onClick="@{() -> user.name = 'New Name'}" />
</LinearLayout>
</layout>
在這個例子中,我們將 user
變量綁定到布局中的 UI 組件。我們還添加了一個按鈕,當(dāng)點(diǎn)擊時,它會更新 user
對象的 name
屬性。
在您的 Activity 或 Fragment 中,設(shè)置數(shù)據(jù)綁定并觀察數(shù)據(jù)源的變化。例如,在 MainActivity.kt
文件中:
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.databinding.UserLayoutBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: UserLayoutBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = UserLayoutBinding.inflate(layoutInflater)
setContentView(binding.root)
// 觀察數(shù)據(jù)源的變化
binding.user = User("John Doe", 30)
}
}
現(xiàn)在,當(dāng)您運(yùn)行應(yīng)用程序時,UI 將根據(jù) user
數(shù)據(jù)源進(jìn)行更新,反之亦然。這就是 Kotlin 數(shù)據(jù)綁定的雙向綁定。