2016-07-06 2 views
0

양방향 Android 데이터 바인딩을 사용하면 일반 역 부정 변환기를 사용할 수 있습니까? 예를 들어, 내가 같은 것을 할 싶습니다 :양방향 데이터 바인딩을 사용하는 부정 부울

<Switch android:checked="@={!viewModel.myBoolean}" /> 

나는이 안드로이드에서 실행하면, 스위치는 빠르게 앞뒤로 발생합니다. 나는 조지 마운트에서 몇 가지 예를 따라 app:inverseChecked 바인딩을 만들려고했지만 성공하지 못했습니다. (단지 이 'inverseCheckedAttrChanged'보기 유형 'android.widget.Switch') 이벤트를 찾을 수 없다는 오류가 계속 발생했습니다.

비교해 보면 Aurelia를 사용하면 양방향 바인딩을 기대할 수 있습니다. WPF에서는 아마 이런 종류의 일들을 쉽게 처리 할 수있는 일종의 InverseBooleanConverter입니다. 그래서 저는 여기서 분명히 분명한 것을 놓치고 있다고 가정하고 있습니다.

답변

1

나는 실제로 그것이 전혀 작동하지 않을 것이라고 기대하지 않았다. 바인딩은 바인딩 표현식의 역함수를 적용하지 않기 때문에 항상 앞뒤로 전환한다고 가정합니다.

즉, 현재 데이터 바인딩 라이브러리 버전으로 동작을 테스트하고 생성 된 소스를 확인했습니다. android:checked의 간단한 예제를 통해 이러한 인벤토리가 어떻게 보이게되어 적절하게 적용되는지 보여줍니다.

또한

조지 마운트는 잠시 전에 그것에 대해 블로그 게시물을 작성한 사람 : 당신이 app:inverseChecked을 구현하려고하면 https://medium.com/google-developers/android-data-binding-inverse-functions-95aab4b11873

, 당신은 또한 설정하는 게터로 세터로 @BindingAdapter("inverseChecked"), @InverseBindingAdapter(attribute="inverseChecked")@BindingAdapter("inverseCheckedAttrChanged")을 구현해야 할 것 변경 청취자.

후자는 다음과 같이 수 :

@BindingAdapter("inverseCheckedAttrChanged") 
public static void setupInverseCheckedAttrChanged(Switch view, InverseBindingListener listener) { 
    OnCheckedChangeListener newListener = null; 
    if (listener != null) { 
     newListener = (v,b) -> listener.onChange(); 
    } 
    view.setOnCheckedChangeListener(newListener); 
} 
관련 문제