developer tip

데이터 바인딩을 사용하여보기 가시성 설정

copycodes 2021. 1. 9. 10:12
반응형

데이터 바인딩을 사용하여보기 가시성 설정


이 질문에 이미 답변이 있습니다.

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 개발자 가이드에 명시된대로 다음과 같이 해야합니다.

<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입니다 IntegerView당신이이 일을하는 방법은 두 가지가 클래스,이 수단 :

  1. View.VISIBLEView.GONE상수를 사용하십시오 . https://developer.android.com/topic/libraries/data-binding/index.html#imports
  2. Define a custom setter for visibility that takes a Boolean. https://developer.android.com/topic/libraries/data-binding/index.html#custom_setters

Possible implementation:

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

Which will make <FrameLayout android:visibility="@{sale}"/> work.

ReferenceURL : https://stackoverflow.com/questions/44420396/use-data-binding-to-set-view-visibility

반응형