Android DataBinding 显示带空检查的合并字符串不起作用
Android DataBinding showing merged string with null check not working
我需要通过数据绑定显示合并的字符串。我可以通过下面的代码轻松显示它。
android:text='@{sentRequestItems.receiver.firstName + " " + sentRequestItems.receiver.lastName}'
但在某些情况下,姓氏有可能得到空形式 API 响应,因此在这种情况下,我无法通过空值检查显示姓氏。
我正在尝试使用以下代码。
android:text='@{sentRequestItems.receiver.firstName != null ? sentRequestItems.receiver.firstName : "" + " " + sentRequestItems.receiver.lastName != null ? sentRequestItems.receiver.lastName : ""}'
此处,当姓氏在 API 响应中不为空时,它不会显示姓氏。
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/txvContactName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginStart="@dimen/_8sdp"
android:layout_marginEnd="@dimen/_4sdp"
android:layout_toStartOf="@+id/ivCancelRequest"
android:fontFamily="@font/lato_bold"
android:text='@{sentRequestItems.receiver.firstName != null ? sentRequestItems.receiver.firstName : "" + " " + sentRequestItems.receiver.lastName != null ? sentRequestItems.receiver.lastName : ""}'
android:textColor="@color/black"
android:textSize="@dimen/_15ssp"
tools:text="John Donny">
非常感谢任何帮助。
我认为在 xml 中执行编码不是最好的主意,可读性受到影响。
我建议你创建静态方法,比如
class Utils {
static String formatName(RequestItem sentRequestItems) {
return (sentRequestItems.receiver.firstName != null ?
sentRequestItems.receiver.firstName : "") + " " +
(sentRequestItems.receiver.lastName != null ? sentRequestItems.receiver.lastName : "")
}
}
调试更简单。
另外,不要忘记括号。您的代码不起作用,因为如果第一次比较 sentRequestItems.receiver.firstName != null
成功,则所有表达式只是 returns sentRequestItems.receiver.firstName
。
然后将其导入您的 xml 并使用,例如
android:text="@{Utils.formatName(sentRequestItems)}"
您可以使用 BindingAdapter。
在科特林。
第 1 步
创建一个 class BindingAdapters,您将在其中拥有所有绑定适配器方法。
第 2 步:创建如下所示的函数
@BindingAdapter("app:contact_name")
@JvmStatic
fun setContactName(tvContactName: TextView, sentRequest: SentRequestItems?) {
if(sentRequest.receiver!=null){
if(sentRequest.receiver.lastName.isNullOrEmpty()){
tvContactName.text=sentRequest.receiver.firstName
}其他{
tvContactName.text="$sentRequest.receiver.firstName
$sentRequest.receiver.firstName"
}
}
}
第 3 步:在文本视图中添加属性
应用程序:contact_name="@{sentRequestItems}"
我需要通过数据绑定显示合并的字符串。我可以通过下面的代码轻松显示它。
android:text='@{sentRequestItems.receiver.firstName + " " + sentRequestItems.receiver.lastName}'
但在某些情况下,姓氏有可能得到空形式 API 响应,因此在这种情况下,我无法通过空值检查显示姓氏。
我正在尝试使用以下代码。
android:text='@{sentRequestItems.receiver.firstName != null ? sentRequestItems.receiver.firstName : "" + " " + sentRequestItems.receiver.lastName != null ? sentRequestItems.receiver.lastName : ""}'
此处,当姓氏在 API 响应中不为空时,它不会显示姓氏。
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/txvContactName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginStart="@dimen/_8sdp"
android:layout_marginEnd="@dimen/_4sdp"
android:layout_toStartOf="@+id/ivCancelRequest"
android:fontFamily="@font/lato_bold"
android:text='@{sentRequestItems.receiver.firstName != null ? sentRequestItems.receiver.firstName : "" + " " + sentRequestItems.receiver.lastName != null ? sentRequestItems.receiver.lastName : ""}'
android:textColor="@color/black"
android:textSize="@dimen/_15ssp"
tools:text="John Donny">
非常感谢任何帮助。
我认为在 xml 中执行编码不是最好的主意,可读性受到影响。 我建议你创建静态方法,比如
class Utils {
static String formatName(RequestItem sentRequestItems) {
return (sentRequestItems.receiver.firstName != null ?
sentRequestItems.receiver.firstName : "") + " " +
(sentRequestItems.receiver.lastName != null ? sentRequestItems.receiver.lastName : "")
}
}
调试更简单。
另外,不要忘记括号。您的代码不起作用,因为如果第一次比较 sentRequestItems.receiver.firstName != null
成功,则所有表达式只是 returns sentRequestItems.receiver.firstName
。
然后将其导入您的 xml 并使用,例如
android:text="@{Utils.formatName(sentRequestItems)}"
您可以使用 BindingAdapter。 在科特林。 第 1 步 创建一个 class BindingAdapters,您将在其中拥有所有绑定适配器方法。
第 2 步:创建如下所示的函数
@BindingAdapter("app:contact_name") @JvmStatic fun setContactName(tvContactName: TextView, sentRequest: SentRequestItems?) { if(sentRequest.receiver!=null){
if(sentRequest.receiver.lastName.isNullOrEmpty()){
tvContactName.text=sentRequest.receiver.firstName
}其他{
tvContactName.text="$sentRequest.receiver.firstName $sentRequest.receiver.firstName"
}
}
}
第 3 步:在文本视图中添加属性
应用程序:contact_name="@{sentRequestItems}"