Je ne comprends pas ... Comment définir une propriété de vue uniquement si le champ de variable n'est pas null?
Par exemple
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:Android="http://schemas.Android.com/apk/res/Android">
<data>
<variable
name="item"
type="com.test.app.Item" />
</data>
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="60dp"
Android:orientation="horizontal">
<ImageView
Android:id="@+id/icon"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentStart="true"
Android:layout_centerVertical="true"
Android:layout_margin="16dp"
Android:src="@{item.getDrawable()}"/>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_centerVertical="true"
Android:layout_marginEnd="16dp"
Android:layout_marginLeft="72dp"
Android:layout_marginRight="16dp"
Android:layout_marginStart="72dp"
Android:layout_toLeftOf="@id/action"
Android:layout_toStartOf="@id/action"
Android:orientation="vertical">
<TextView
Android:id="@+id/text1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:singleLine="true"
Android:textColor="@color/black_87"
Android:textSize="16sp"
Android:text="@{item.getTitle()}"/>
<TextView
Android:id="@+id/text2"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:autoLink="web|email"
Android:linksClickable="false"
Android:singleLine="true"
Android:textColor="@color/black_54"
Android:textSize="14sp"
Android:text="@{item.getSubtitle()}"/>
</LinearLayout>
</RelativeLayout>
</layout>
Certains champs d’élément peuvent être nuls et je n’appellerai pas inutilement les méthodes de présentation. Et je n'aurai pas NullPointerException
. Comment puis-je définir une propriété uniquement si elle n'est pas nulle?
P.S. Désolé pour l'anglais.
Bien la liaison de données évite NullPointerException en général en la vérifiant et attribue la valeur par défaut (null par exemple) même si item
est elle-même null dans votre exemple.
Mais un exemple de base pour les vérifications nulles pour les propriétés de l'élément:
Android:text='@{item.title != null ? user.title : ""}'
Ou utilisez "l'opérateur de coalescence nul". L'opérateur de fusion nul (??
) choisit l'opérande gauche s'il n'est pas nul ou le droit s'il est nul.
Android:text='@{item.title ?? ""}'
Notez que title
ou getTitle
n'a pas d'importance.
La liaison de données n'a pas besoin de vérifier la valeur null, elle sera gérée par classe de liaison.
Si vous avez besoin de vérifier null pour une autre raison (comme définir la valeur par défaut), vous pouvez l'utiliser comme ceci.
Android:text='@{item.gender != null ? item.gender : @string/male}'
ou
Android:text='@{item.gender ?? @string/male}'
Les deux exemples ci-dessus sont identiques. Ici, @string/male
est la valeur par défaut, lorsque item.gender
est null
.