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