代码之家  ›  专栏  ›  技术社区  ›  Martin Zeitler

数据绑定失败,出现“无法猜测”

  •  1
  • Martin Zeitler  · 技术社区  · 6 年前

    自从Android Studio升级后 3.2.0 我面临以下问题:

    >无法猜测com.ACME.database.model.Order

    我也看到了这个 answer ,提示“包名必须以小写字母开头”。

    ... 看起来很像,好像这个 variable

    <data class=".databinding.OrderFragmentBinding">
        <variable name="order" type="com.ACME.database.model.Order"/>
        ...
    </data>
    

    找到: New data binding compiler for binding classes

    :这种分配是否也受命名约定的影响?我的意思是,有没有可能(除了更改大写的包名)让数据绑定v2“猜测”成功?

    2 回复  |  直到 4 年前
        1
  •  23
  •   Muhammad Noman    5 年前

    这是因为您使用数据绑定的类名或包名。这些类(使用数据绑定)必须以大写字母开头,包以小写字母开头。

        2
  •  11
  •   Kolaaa    5 年前

        3
  •  10
  •   Martin Zeitler    5 年前

    中的这些设置 gradle.properties 一定要启用 androidx 数据绑定编译器:

    android.databinding.enableV2 = false
    android.enableExperimentalFeatureDatabinding = true
    

    Download https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler/3.2.0/databinding-compiler-3.2.0.pom
    Download https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler/3.2.0/databinding-compiler-3.2.0.jar
    

    它抱怨说:

    WARNING: The option setting 'android.databinding.enableV2=false' is experimental and unsupported.
    The current default is 'true'
    
    WARNING: The option setting 'android.enableExperimentalFeatureDatabinding=true' is experimental and unsupported.
    The current default is 'false'
    

    最有可能 androidx.fragment.app.Fragment 而不是 android.support.v4.app.Fragment 将是必需的,以便绑定数据 Fragment


    更新 :

    com.android.tools.build:gradle:3.5.0 上述解决方法不再有效;必须重构XML文件。当不添加任何 class="" 属性到 <data /> 标记-并将此标记添加到任何现有的 <layout> 标签。复制 id 关于数据绑定 <include> 标签也可以防止生成 身份证件 <包括> 标签,不在包含的布局中)。

        4
  •  5
  •   gtrevi    6 年前

    同样的事情发生在我更新到3.2之后(在迁移之前工作的应用程序,并且没有代码更改)。。。然后这个“猜测”的问题,即使我有小写字母在第一个字母的包名!

    <data>
       ...
       <variable name="rule" type="com.gta.viewmodels.vmRule"/>
       ...
    </data>
    

    每一个

    总之,我通过在中降级v2数据绑定解决了这个问题 gradle.properties公司

    android.databinding.enableV2=false
    

    看起来Android Studio PG并没有很好地测试这个断言( here

    Data Binding V2 is now enabled by default and is compatible with V1.

        5
  •  4
  •   ravi    4 年前

    <data>
        <variable
            name="something"
            type=""/>
    </data>
    

        6
  •  3
  •   jee    5 年前

    我面对这个问题是因为

    1. 我的包裹名称以大写字母开头
        7
  •  1
  •   JML    4 年前

    如果上面的方法都不起作用,请检查引用的类类型是在同一个模块中,还是在xml所依赖的模块所依赖的模块中。

        8
  •  1
  •   Michel Fernandes    4 年前

    <data>
            <variable
                name="clickListener"
                type="com.example.liberdade.caixa.CaixaListener" />
    
        9
  •  0
  •   Behnam Nasehi Masooleh    4 年前

    我改了这个: 单击处理程序 单击处理程序

        10
  •  0
  •   Shaheer Ghouri    3 年前

    我在我的案例中使用了小写字母的类名(propertyModel)应该是(propertyModel)