web-dev-qa-db-fra.com

Liaison de données: définir la propriété si elle n'est pas null

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.

14
Шах

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.

0
Khemraj