美文网首页
Data Binding 的使用

Data Binding 的使用

作者: falcon_li | 来源:发表于2018-08-06 11:17 被阅读0次

    官网使用说明

    自己写的学习Android Jetpack 的开源项目

    1.在根目录下的 build.gradle 中,添加

    android {    ... 

          dataBinding {        enabled = true    }

    }

    2. 在 xml 文件的最外层,使用 <layout> ...</layout> 标签(可以使用 alt + enter 的快捷键,选择 convert to data binding layout) , 在 <variable></variable> 标签中,定义需要使用到的对象,如

    <variable>

        name= "user"

        type="com.example.User"/>

        另外,还可以使用 <import  ... /> 标签,引用需要使用的类,

        如:

    <import    

        type=""android.view.View.OnClickListener""

    />

    <variable

        name="click"

        type="OnClickListener"

    />

    3.在使用时,使用 @{} 设置值,如

    <TextView

         android:layout_width=".."   

        android:layout_height = ".."

        android:text="@{user.name}"

        android:onClick="@{click}"

    />

        此外,android:onClick = '' @{...}'' 中,还可以传入 lambda 表达式

    4.在 Activity 或者 Fragment 中,设置引用的类。 

    在 xml 中设置好后,在 Android Studio 的 Build -> Rebuild Project  后,自动生成 xml 文件对应的 DataBinding 类,生成的类与 xml 文件衔接,如 main_activity.xml 生成 

    MainActivityDataBinding。

    使用


      Activity 中

    var mainAdb:MainActivityDataBinding = DataBindingUtil.setContentView(...);

    Fragment 中

    var mainFdb = DataBingdingUtils<MainFragmentDatabinding>.inflate(...);

    Adapter 中的 DataBinding 对象与 item 的 xml 文件名对应,如

    item_user.xml 生成 ItemUserDataBinding,在 onCreateViewHolder() 中,使用 ItemUserDataBinding.inflate 生成 view 

    5.设置 xml 中的对象引用

    mainActivityDataBinding.user = User("name","age")//kotlin

    mainActivityDataBinding.user = new User("name","age") // java

    6.关于 object 对象的 binding 

    如果只使用到其中的某个或者多个属性,可以使用 ObservanleFeild<T> 属性,

    class User{

         val name:ObservableFeild<String> = ObservableFeild<string>()

    }

    当 user.name 发生变化, TextView 的 text 自动发生变化

    也可以继承 BaseObservable 对象,进行绑定

    class User : BaseObservable() {   

        var firstName: String? = null       

        @Bindable get() = field       

        set(firstName) {           

            field = firstName           

            notifyPropertyChanged(BR.firstName)       

        }   

        var lastName: String? = null       

        @Bindable get() = field       

        set(lastName) {           

            field = lastName           

            notifyPropertyChanged(BR.lastName)       

        }

    }

    7.设置自定义属性,使用@BindingAdapter("setUrl") 注解

    <ImageView

        android:layout_width=".."

        android:layout_height = ".."

        app:setUrl="..."

    />

    Kotlin中使用 创建 .kt 文件

        注意:

    1.不是创建 Kotlin 的 class,而是 .kt 文件中

    2.需要引入包 implementation 'androidx.core:core-ktx:xxxx_version'

    @BindingAdapter("image_url")

    fun setImageFromUrl(view: ImageView, imageUrl: String?) {

        if (!imageUrl.isNullOrEmpty()) {

            GlideUtil.setImage(view.context, imageUrl, view) 

        }

    }

    Java 中使用,则在 public 静态方法中添加注解即可

    public class MyBindingAdapter {

        @BindingAdapter("loadImageFromUrl")

        public static void loadImage(ImageView view, String url) {

            if (!url.isEmpty()) {

                Glide.with(view.getContext()).load(url).into(view);

            }

        }

        ...

    }

    8.使用 LiveData ,自动管理生命周期

    将 User 继承 ViewModel ,更多使用在 LiveData 中说明。

    9.bug,can not resolve data ding

    > 在 module 的 build.gradle 中添加 apply plugin:'kotlin-kapt'

    ```

    dependencies {

    ...

    kapt 'com.android.databinding:compiler:3.0.1'

    }

    ```

    其中的 *3.0.1* 与 Project 的 build.gradle 中的 版本号保持一致

    相关文章

      网友评论

          本文标题:Data Binding 的使用

          本文链接:https://www.haomeiwen.com/subject/jbjwvftx.html