DataBinding 笔记

DataBinding 笔记

那些年踩过的坑


  1. public 类型的变量,getter 方法必须有,没有就会报错:Could not find accessor xxx.xxx.FiledName。原理是:DataBinding 需要给变量设置值、获取变量的值

  2. ObservableXX 类型的变量设置值时使用:fieldName.set() 方法;在布局文件中获取值时使用:fieldName,在 Java 文件中获取值时使用 filedName.get()Java 文件中,fieldName 获取的是对象的地址)

  3. 所有在布局文件中申明的变量,在使用前,都需要在 Java 文件中初始化。比如布局文件中使用了方法,就需要在 Java 文件中实例化申明了交互方法的类

  4. 在使用集合时(例如:ObservableArrayList),如果要指明集合的范型,使用 import 引入范型的包

  5. 把正常布局改为 databinding 类型的布局的正确姿势:在正常布局的最外面包裹 layout;把正常布局根节点上命名空间声明移到 layout 节点上,把 xml:tools 的申明 必须 得移动到 layout 上,否则布局预览上没有效果;把 data 节点作为 layout 节点的第一直接子元素

  6. 控件 id 的值不要相同。如果有相同,在 viewpager 使用时,按顺序向后翻页没有问题,但是向前翻页,会报错:java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class android.support.v7.widget.RecyclerView$SavedState instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/common_rv. Make sure other views do not use the same id.

  7. 使用 BindingAdpter 为首个类型的控件定义一个属性,要想让它在 Studio 的智能提示中出现,需要在 res/values/attrs.xml 文件中,使用 declare-styleable 申明自定义属性。属性的名称就是控件的名称(大小写一致),属性里的每个 attr 节点都代表着自定义的每个属性

  8. 特殊字符使用:& - &amp;< - &lt;> - &gt;

问题


  1. 动态布局(即代码生成的而已)是否可以使用 DataBinding

  2. Presenter 中,如何传入控件或变量(比如要改变可见性的 TextView,要显示、消失的 ProgressDialog)?

  3. 如何给控件使用 DataBinding 设置 marginXXX 属性?
    3.1 使用 @BindingAdapter("android:layout_marginTop") 注解
    3.2 方法的第一个参数:View view,第二个参数:float marginTop
    3.3 注意:第二个参数类型一定得是 float

原文地址:https://www.cnblogs.com/wchhuangya/p/6031917.html