Android Привязка данных, показывающая объединенную строку с проверкой нуля, не работающей - PullRequest
0 голосов
/ 12 марта 2020

Мне нужно показать объединенную строку через привязку данных. Я могу легко показать это по приведенному ниже коду.

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

Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Вы можете использовать BindingAdapter. В Kotlin. Шаг 1 Создайте класс 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

} else {

tvContactName.text = "$ sentRequest.receiver.firstName $ sentRequest $ .receiver.firstName "

}

}   

}

Шаг 3. Добавьте атрибут в текстовое представление

app: contact_name =" @ { sentRequestItems} "

0 голосов
/ 12 марта 2020

Я думаю, что это не лучшая идея для кодирования в xml, читаемость страдает. Я предлагаю вам создать метод stati c, что-то вроде

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 успешно, все выражения просто возвращают sentRequestItems.receiver.firstName.

затем импортируйте его в ваш xml и используйте, как

android:text="@{Utils.formatName(sentRequestItems)}"
...