android使用DataBinding踩坑记录

---error: duplicate attribute.

估计很多人遇到后都不知道怎么办,但一直提示layout文件有问题,所以就尝试将跟布局的width和height属性去掉,然后就没有这个问题了

---有ViewPager的界面必须为ViewPager设置一个id

在没有使用DataBinding的时候,通常都会为ViewPager设置一个id.有一次在使用的时候结合DataBinding,所以就没有设置id,所以就抛出必须设置id异常.

---找不到BR类

在使用DataBinding的时候,偶尔需要用到BR类,然而有时要用的时候总会找不到.

这个时候各种clean,rebuild都没用,检查layout文件的代码也没发现问题.在生成的DataBinding类里面把BR类复制出来编译不会报错,运行的时候发现报错了.所以最后想到了用反射根治这个问题,虽然这种方式并不方便,但也算是解决了这个问题.

public static int getBrField(String fieldName){
    int fieldId = 0;
    try{
        Class brClass = Class.forName(MyApplication.getInstance().getPackageName() + ".BR");
        Object brObject = brClass.newInstance();
        fieldId = (int)(brClass.getField(fieldName).get(brObject));
    }catch(Exception e){
        e.printStackTrace();
    }
    return fieldId;
}

注意: 使用了反射之后有开启代码混淆的话必须在混淆规则忽略混淆   

-keep class 你的包名.BR { *;}

---没办法使用&&符号的问题

相信有些人可能遇到这个问题,其实不知没办法在@{}里面使用 & 符号,在双引号里面也没办法使用.我一开始也没反应过来,后来

android:text="&" 这里试了一下才想起来这里要用转义,遇到这个问题的人估计很少在layout文件里面写 & 符号,所以一时半会没反应过来.还有,<> 这2个符合也需要使用转义.

常用转义表

学习DataBinding时做的笔记