升级到Gradle 2.3后,数据绑定中断

升级到Gradle 2.3后,数据绑定中断,第1张

概述升级到Gradle2.3之后.我的项目无法编译.我在控制台中有日志不兼容的类型:ObservableInt不能转换为int查看生成的文件android.databinding.ObservableIntviewModelLoadingVisibility;this.vLoading.getRoot().setVisibility(viewModelLoadingVisibility);在xml文件中<andr

升级到Gradle 2.3之后.我的项目无法编译.我在控制台中有日志

不兼容的类型:ObservableInt不能转换为int

查看生成的文件

androID.databinding.ObservableInt viewmodelLoadingVisibility;this.vLoading.getRoot().setVisibility(viewmodelLoadingVisibility);

在xml文件中

<androID.support.v7.Widget.RecyclerVIEw    androID:ID="@+ID/rvProducts"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"    androID:background="@androID:color/white"    androID:visibility="@{viewmodel.contentVisibility}"    app:layout_behavior="@string/appbar_scrolling_vIEw_behavior"/>

我在绑定类中尝试了方法

@BindingAdapter("app:visibility")public static voID setVIEwVisible(VIEw vIEw, ObservableInt visible) {        int visibility = visible.get();        vIEw.setVisibility(visibility);}

并获得日志

warning: Application namespace for attribute app:visibility will be ignored.

public static voID setVIEwVisible(VIEw vIEw, ObservableInt visible) {

warning: Use of ObservableFIEld and primitive cousins directly as method parameters is deprecated and support will be removed soon. Use the contents as parameters instead in method public static voID setVIEwVisible(androID.vIEw.VIEw,androID.databinding.ObservableInt)

public static voID setVIEwVisible(VIEw vIEw, ObservableInt visible) {

有人遇到吗?

解决方法:

这看起来像个错误.请归档.有很多测试,我们不希望这种回归.重要的是,我们要为您提供具体的示例,以确保能够抓住它.

您现在可以忽略警告.

首先是由于以下原因造成的:

@BindingAdapter("app:visibility")

您应该改用以下代码:

@BindingAdapter("visibility")

第二个原因是因为我们支持ObservableInt作为参数.您通常不希望接受ObservableInt,而是希望接受int.我希望看到需要ObservableInt的用例.我们可能只是删除该警告并始终支持它,或者如果没有有效的使用,我们可能会拔掉支持ObservableInt的插头作为参数.

—–编辑—–

我用一个小的应用程序进行了测试,没有任何BindingAdapter就没有任何问题.这是布局:

<layout>    <data>        <variable name="model" type="com.example.gmount.testobservableint.MyModel"/>    </data>    <androID.support.constraint.ConstraintLayout            xmlns:androID="http://schemas.androID.com/apk/res/androID"            xmlns:tools="http://schemas.androID.com/tools"            xmlns:app="http://schemas.androID.com/apk/res-auto"            androID:layout_wIDth="match_parent"            androID:layout_height="match_parent"            androID:onClick="@{model::clicked}"            tools:context="com.example.gmount.testobservableint.MainActivity">        <TextVIEw                androID:layout_wIDth="wrap_content"                androID:layout_height="wrap_content"                androID:text="Hello World!"                app:layout_constraintBottom_toBottomOf="parent"                app:layout_constraintleft_toleftOf="parent"                app:layout_constraintRight_toRightOf="parent"                app:layout_constrainttop_totopOf="parent"                androID:visibility="@{model.visibility}"        />    </androID.support.constraint.ConstraintLayout></layout>

这是我的模型:

public class MyModel {    public final ObservableInt visibility = new ObservableInt(VIEw.VISIBLE);    public voID clicked(VIEw vIEw) {        int oldVisibility = visibility.get();        int newVisibility = oldVisibility == VIEw.VISIBLE ? VIEw.GONE : VIEw.VISIBLE;        visibility.set(newVisibility);    }}

即使当我使用带有ObservableInt的BindingAdapter时,它也可以工作.这是我的BindingAdapter:

@BindingAdapter("visiblity")public static voID setVisibility(VIEw vIEw, ObservableInt visibility) {    vIEw.setVisibility(visibility.get());}

我将视图的绑定更改为:

    <TextVIEw ...            app:visibility="@{model.visibility}"    />

您的viewmodel有什么不同吗?

总结

以上是内存溢出为你收集整理的升级到Gradle 2.3后,数据绑定中断全部内容,希望文章能够帮你解决升级到Gradle 2.3后,数据绑定中断所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1091379.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存