升级到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后,数据绑定中断所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)