2016-12-31 420 views
1

我在我的应用程序中有一些TextView,它由strings.xml资源文件的密钥和一个动态传递的参数组成。我使用Android数据绑定的地方'??'符号表示它应该用空白字符串替换空值,如下面的示例所示。 但是,当参数值为空时,直到TextView满载数据时,我会看到类似“null min”的内容,当我喜欢它时:“min”。Android DataBinding“??”符号和参数化字符串从资源。如何避免'空'文本?

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

strings.xml

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

enter image description here enter image description here

回答

3

vm.runtime可能为空,但这可能是一个字符串格式的有效参数,所以它被认为是有效的,并且永远不会被评估。您可以使用

一个表达式是:

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

我想这应该在所有的语言格式正确,但我会如果您打算本地化,建议使用复数而不是字符串。

+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">%d</xliff:g> 

和贯穿其中的一个空字符串。更改字符串xliff以使用字符串占位符:

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

并将vm.runtime转换为字符串。

相关问题