web-dev-qa-db-fra.com

Je veux concaténer deux chaînes pour un TextView dans Android, Data Binding Api

J'utilise DataBinding Api pour définir les vues dans les mises en page Android. Voici ma mise en page.

layout.xml

<?xml version="1.0" encoding="utf-8"?>
 <layout xmlns:Android="http://schemas.Android.com/apk/res/Android">
  <data>
    <variable name="user" type="testing.sampleapp.com.sampleapp.User"/>
  </data>
<LinearLayout
    Android:orientation="vertical"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">
    <TextView Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="@{ "Hello " + user.firstName}"/>
</LinearLayout>

Je veux que le TextView affiche Hello UserName. Comment y parvenir en utilisant l’API de liaison de données.

50
Sasank Sunkavalli

concat int avec accent grave (`)

Android:text="@{`Hello ` + user.firstName}"/>

Vous pouvez le concaténer de plusieurs façons, vérifiez-le ici [concat-deux-chaînes-dans-textview-using-databinding

135
Ravi Rupareliya

@GeorgeMount a déjà répondu à cette question dans les commentaires de l'une des solutions. Ce qui me semble être la meilleure solution jusqu'ici. S'il vous plaît lui donner un +1

Android:text="@{@string/location(user.city,user.state)}"

dans votre strings.xml

<string name="location">%1$s, %2$s</string>
37
Prakash

Beaucoup de façons de concaténer des chaînes

1. Utilisation de la ressource chaîne ( préférable en raison de la localisation )

Android:text= "@{@string/generic_name(user.name)}"

Faites juste une ressource de chaîne comme ceci.

<string name="generic_name">Hello %s</string>

2. Concat codé en dur

Android:text="@{`Hello ` + user.name}"/>

3. Utilisation de la méthode concat de String

Android:text="@{user.firstName.concat(@string/space).concat(user.lastName)}"

Ici space est une entité HTML qui est placée dans strings.xml. Parce que XML n'accepte pas les entités HTML ni les caractères spéciaux directement. (Lien Entités HTML)

<string name="space">\u0020</string>

4. Utilisation de String.format()

Android:text= "@{String.format(@string/Hello, user.name)}"

vous devez importer la classe String dans la présentation dans ce type.

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <data>
        <import type="String" />
    </data>
    <TextView
        Android:text= "@{String.format(@string/Hello, user.name)}"
        ... >
    </TextView>
</layout>

5. Une autre méthode

Android:text="@{@string/generic_name(user.firstName,user.lastName)}"

Dans ce cas, mettez une ressource de chaîne dans strings.xml

<string name="generic_name">%1$s, %2$s</string>

Il peut y avoir de nombreuses autres façons, choisissez celle dont vous avez besoin.

21
Khemraj

Puisque xml prend en charge les guillemets simples pour les valeurs d'attribut, vous pouvez également le faire:

Android:text='@{"Hello "+user.firstName}'
7
ArJ

Il y a deux façons.

première solution

concat avec accent grave (`)

Android:text="@{`Hello ` + user.firstName}"/>

Deuxième solution

Déclarez votre chaîne dans strings.xml

comme "Hello %1$s , (whatever you want to add then add here)".

AMD utilise String.format(stringResource, upsatename);

5
Yogesh Rathi

Pour faire un concat en mise en page XML:

<data>

/*This is used for Android view*/
<import type="Android.view.View" />

/*This is used for Android resources*/
<import type="com.myapp.R" />

/*This is app context*/
<variable
    name="context"
    type="Android.content.Context" />

/*This is used for model data*/
<variable
    name="item"
    type="com.myapp.models.Chapter" />
</data>

Android:text="@{item.serialNo.concat(@string/space).concat(item.title)}"

Dans strings.xml, j'ai ajouté du code pour les espaces:

<string name="space">\u0020</string>
3
Ready Android

si vous voulez concaténer la ressource String avec les données de votre modèle, vous pouvez le faire de la manière suivante:

 Android:text='@{@string/release_date+model.release_date}'
2
Jackky777