2016-12-31 3 views
1

나는 strings.xml 리소스 파일과 동적으로 전달되는 매개 변수의 키로 합성 된 TextView이 내 앱에 있습니다. 나는 안드로이드 데이터 바인딩을 사용 어디 '?? 표기법은 공백 문자열로 null을 대체해야 함을 의미합니다 (예 : 아래 그림 참조). 그러나 TextView에 데이터가 가득 찰 때까지 매개 변수 값이 null이면 "min"과 같은 것을 볼 수 있습니다. strings.xml에서Android 데이터 바인딩 "??" 표기법 및 매개 변수화 된 문자열. 'null'텍스트를 피하는 법?

<TextView 
    android:id="@+id/text_runtime" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:padding="2dp" 
    android:text="@{@string/min(vm.runtime) ?? ``}" 
    tools:text="120 min" /> 

:

<xliff:g id="min">%d</xliff:g> 

거기에 빈 문자열을 전달 : 당신의 문자열 XLIFF에서

<string name="min"> 
    <xliff:g id="min">%d</xliff:g> 
    min 
</string> 

enter image description here enter image description here

답변

3

vm.runtime은 null 일 수 있지만 문자열 형식의 유효한 매개 변수 일 수 있으므로 유효한 것으로 간주되어 ??은 평가되지 않습니다. 당신이 사용할 수있는

한 표현은 다음과 같습니다

<TextView 
    android:id="@+id/text_runtime" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:padding="2dp" 
    android:text="@{vm.runtime == null ? `` : @string/min(vm.runtime)}" 
    tools:text="120 min" /> 

당신이 그것을 대신 빈 문자열의 min, 당신은 두 번 문자열을 포맷 할 수 있습니다 갖고 싶어.

<TextView 
    android:id="@+id/text_runtime" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:padding="2dp" 
    android:text="@{@string/min(@string/quantity(vm.runtime) ?? ``)}" 
    tools:text="120 min" /> 

그리고 당신의 분은 다음과 같이 정의된다 :

<string name="min"> 
    <xliff:g id="min">%s</xliff:g> 
    min 
</string> 

그리고 양 문자열은 단순히 것이다 : 나는 것이지만

<string name="quantity">%d</string> 

나는,이 모든 언어로 제대로 포맷해야한다고 생각 현지화하려는 경우 min 대신 string을 사용하는 대신 복수형을 사용하는 것이 좋습니다.

+1

네 말이 맞아, 나는 너무 간단하다고 생각하지 않았다. 한편, 임시 해결 방법을 시도했다 : http://stackoverflow.com/questions/41418764/android-databinding-can-i-pass-constructor-parameter-to-my-data-variable – alexpfx

+0

실제로''작동하지 않는다. ... 데이터 바인딩에 빈 문자열을 쓸 수있는 유효한 솔루션을 보내 주시겠습니까? 감사 – Fer

1

당신은 정수 자리 표시자를 사용하고 있습니다. 문자열 자리 표시자를 사용하도록 문자열 xliff를 변경하십시오.

<xliff:g id="min">%s</xliff:g> 

그리고 vm.runtime을 string으로 변환하십시오.