Android数据绑定不适用于属性

前端之家收集整理的这篇文章主要介绍了Android数据绑定不适用于属性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图使用数据绑定与自定义视图(可能的用法乔治山显示 here).

没有< merge>不能想像构建复合视图标签.但是在这种情况下,数据绑定失败:

MyCompoundView类:

public class MyCompoundView extends RelativeLayout {

MyCompoundViewBinding binding;

public MyCompoundView (Context context,AttributeSet attrs) {
    super(context,attrs);
    init(context);
}

private void init(Context context){
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    binding = MyCompoundViewBinding.inflate(inflater,this,true);
}

my_compound_view.xml:按应用:isGone =“@ {!data.isViewVisible}”我希望控制整个复合视图的可见性

<?xml version="1.0" encoding="utf-8"?>

<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    >

    <data>
        <variable name="data" type="com.example.Myviewmodel"/>
    </data>

    <merge
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:isGone="@{!data.isViewVisible}">

        <ImageView
            android:id="@+id/image_image"
            android:layout_width="60dp"
            android:layout_height="60dp"
            app:imageUrl="@{data.imagePhotoUrl}"/>

         <!-- tons of other views-->

    </merge>

</layout>

编译错误

Error:(13) No resource identifier found for attribute 'isGone' in package 'com.example'
Error:(17,21) No resource type specified (at 'isGone' with value '@{!data.isViewVisible}').

我全部需要@BindingAdapter方法.现在我从FrameLayout继承视图,并使用< RelativeLayout>而不是< merge> – 它的工作原理但我有额外的嵌套布局.

问题:合并attrs被忽略.有办法解决这个问题吗?

Android Studio 1.5.1稳定

Gradle插件com.android.tools.build:gradle:1.5.0

解决方法

在通货膨胀后没有合并对象,所以没有任何值可以使用合并标签.我不能想到任何可以合并的绑定标签.

您可以将标记分配给根元素,并使用BindingAdapter来执行所需的操作.

<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    >

    <data>
        <variable name="data" type="com.example.Myviewmodel"/>
    </data>

    <merge
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <ImageView
            app:isGone="@{!data.isViewVisible}"
            android:id="@+id/image_image"
            android:layout_width="60dp"
            android:layout_height="60dp"
            app:imageUrl="@{data.imagePhotoUrl}"/>
         <!-- tons of other views-->
    </merge>
</layout>

如果要使用Binding类本身进行某些操作,可以使用DataBindingUtil从View中查找对象.

@BindingAdapter("isGone")
public static void setGone(View view,boolean isGone) {
    ViewDataBinding binding = DataBindingUtil.findBinding(view);
    //... do what you want with the binding.
}

猜你在找的Android相关文章