JetPack-- DataBinding结合ViewModel和LiveData使用

简介

  • DataBinding 用来将数据绑定在UI页面上,实现试图和数据的双向绑定,主要是体现数据驱动开发,具体含义是在得到数据后,通过框架在视图树中找到与数据绑定的视图

使用

  • 在build.gradle中添加
android {
        ....
    defaultConfig {
        ...
        dataBinding {
            enabled = true
        }
}
  • xml中实现双向绑定
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">


    <data>
        <variable
            // 属性名,什么名字都可以,相当于给你的ViewModel起的别名
            name="wjx"
            // 类型
            type="com.wjx.android.jetpackdemo.MyViewModel" />
    </data>


    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">


        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            // 对数据进行操作
            android:onClick="@{()->wjx.setLikedNumber(1)}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.498"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.421" />


        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            android:onClick="@{()->wjx.setLikedNumber(2)}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.498"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.575" />


        <TextView
            android:id="@+id/textView"
            android:layout_width="86dp"
            android:layout_height="37dp"
            // 数据的显示和视图绑定
            android:text="@{String.valueOf(wjx.likedNumber)}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.495"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.247" />


    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>
  • acticity中使用DataBinding
class MainActivity : AppCompatActivity() {
    private lateinit var mViewModel: MyViewModel
    private lateinit var activityMainBinding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 将视图绑定
        activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        // vm和控制器绑定
        mViewModel = ViewModelProviders.of(this).get(MyViewModel::class.java)
        // 取回数据, this LifeCycleOwner
        activityMainBinding.setWjx(mViewModel)
        // 进行数据观察
        activityMainBinding.setLifecycleOwner(this)
    }
}
发布了175 篇原创文章 · 获赞 56 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_39424143/article/details/105093673