web-dev-qa-db-ja.com

データバインディングを使用してビューの可視性を設定する

カスタム変数を使用してViewの可視性を設定しようとしましたが、エラーが発生しました:Identifiers must have user defined types from the XML file. visible is missing it。データバインディングを使用してビューの可視性を設定することは可能ですか?ありがとう。

<data>
    <variable
        name="sale"
        type="Java.lang.Boolean"/>
</data>

<FrameLayout Android:visibility="@{sale ? visible : gone}"/>
51

Android Developer Guide に記載されているように、次のようにする必要があります。

<data>
    <import type="Android.view.View"/>
    <variable
        name="sale"
        type="Java.lang.Boolean"/>
</data>

<FrameLayout Android:visibility="@{sale ? View.GONE : View.VISIBLE}"/>
113
David Artmann

レイアウトで:

<data>
    <variable
        name="viewModel"
        type="...."/>
</data>


<View
 Android:layout_width="10dp"
 Android:layout_height="10dp"
 Android:visibility="@{viewModel.saleVisibility, default=gone}"/>

ViewModel Javaコードで:

@Bindable
public int getSaleVisibility(){
 return mSaleIndecator ? VISIBLE : GONE;
}
34
Lior

問題は、visibilityIntegerクラスのViewであるということです。つまり、この作業を行うには2つの方法があるということです。

  1. View.VISIBLEおよびView.GONE定数を使用します。 https://developer.Android.com/topic/libraries/data-binding/index.html#imports
  2. visibilityを取るBooleanのカスタムセッターを定義します。 https://developer.Android.com/topic/libraries/data-binding/index.html#custom_setters

可能な実装:

@BindingAdapter("Android:visibility")
public static void setVisibility(View view, Boolean value) {
    view.setVisibility(value ? View.VISIBLE : View.GONE);
}

<FrameLayout Android:visibility="@{sale}"/>が機能します。

22
Kiskae