カスタム変数を使用して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}"/>
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}"/>
レイアウトで:
<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;
}
問題は、visibility
がInteger
クラスのView
であるということです。つまり、この作業を行うには2つの方法があるということです。
View.VISIBLE
およびView.GONE
定数を使用します。 https://developer.Android.com/topic/libraries/data-binding/index.html#importsvisibility
を取る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}"/>
が機能します。