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


102

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}"/>

답변:


232

Android 개발자 가이드에 명시된대로 다음과 같이 해야합니다.

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

<FrameLayout android:visibility="@{sale ? View.GONE : View.VISIBLE}"/>

6
값을 "판매"로 설정하는 방법은 무엇입니까?
RobinHood

그렇다면 String 변수에 "sale"값을 할당하는 방법을 의미합니까?
David Artmann

바로 그거죠! 나는 문제에 직면 해있다. 비교 후 알려 드리겠습니다.
RobinHood

41
젠장! 내가 바보 수입을 놓친 방법 . 됐어요, 감사합니다.
RobinHood

야! 스크롤에서 위치 결함이 발생하는 이유는 무엇입니까? 어댑터
RobinHood

58

레이아웃에서 :

<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;
}

3
경미한 두통에서 나를 구해 주셨습니다
Koen Van

2
데이터 모델이 작동하려면 Observable이어야합니다.
yshahak

이것은 포함 하지 않고 나를 위해 일했습니다 @Bindable. 내가 포함했을 때 확장 제안을 포함하여 다른 바인딩 오류가 발생했습니다 BaseObservable. 여기에 좋은 포인터
Gene Bo

2
받아 들여진 대답이어야합니다! 그것은 나를 위해 완벽하게 작동했습니다!
Crisic

에 대한 제안 LiveData<Boolean>?
Sourav Bagchi

41

문제는 수업 에 있다는 것 visibility입니다. 즉,이 작업을 수행하는 두 가지 방법이 있습니다.IntegerView

  1. View.VISIBLEView.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}"/>작동 할 것입니다.


4
편리한 곳에서는 주석 처리기가 컴파일 중에 자동으로이를 감지합니다.
Kiskae

내 BindingUtils.java에 넣어 주셔서 감사합니다
nhoxbypass

그러나 가치 판매를 설정하는 방법?
EslamWael74

1
<include 태그에 동일한 접근 방식을 어떻게 적용 할 수 있습니까?
Zafer Celaloglu

1
@ EslamWael74는 Java / Kotlin 코드의 바인딩을 통해 판매 가치를 설정합니다. val binding = MyClassBinding.inflate (...)와 같은 것입니다. 그러면 binding.sale = true를 호출 할 수 있습니다.
Matt Robertson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.