116 votes

Je veux concaténer deux chaînes de caractères 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 Bonjour Nom d'utilisateur . Comment y parvenir en utilisant l'api de liaison de données.

287voto

Ravi Points 99

Le concaténer avec accent grave (`)

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

Vous pouvez le concaténer de plusieurs façons, vérifiez-le ici. concat-two-string-in-textview-using-databinding

0 votes

Oui, ça a marché. Merci . J'utilisais une simple virgule inversée ('). L'accent grave(`) a fonctionné pour moi.

0 votes

@SasankSunkavalli heureux de vous aider :) Pour les chaînes de caractères, utilisez toujours l'accent grave lorsque vous utilisez DataBinding.

1 votes

Je ne comprends pas. Sur mon .xml, cette méthode, ainsi que toutes les autres méthodes de cette page, sont loin d'être fonctionnelles. Tout ce qu'elle fait est d'imprimer comme : @{ Bonjour ` + user.firstName}`

83voto

nag prakash Points 145

Cette question a déjà été traitée par @GeorgeMount dans les commentaires d'une des solutions. Ce qui me semble être la meilleure solution jusqu'à présent.

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

dans votre strings.xml

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

0 votes

Super ! thnx wery

0 votes

C'est ce que je recherche :)

61voto

Khemraj Points 8449

Plusieurs façons de concaténer des chaînes de caractères

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

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

Il suffit de créer une ressource de chaîne comme ceci.

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

2. Concordance codée en dur

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

3. Utilisation de String Méthode concat de l'utilisateur

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

Ici space est une entité html qui est placée à l'intérieur de strings.xml . Parce que XML n'accepte pas directement les entités Html ou les caractères spéciaux. (Lien Html Entités)

<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 le layout 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 type chaîne dans strings.xml

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

Il peut y avoir de nombreux autres moyens, choisissez celui dont vous avez besoin.

0 votes

L'option 1 a fonctionné pour moi. L'option 4 n'a pas fonctionné. Si vous avez un adaptateur étroit, je recommande l'option 1.

11voto

ArJ Points 150

Puisque xml supporte les guillemets simples pour les valeurs d'attribut, vous pouvez également faire ceci :

android:text='@{"Hello "+user.firstName}'

7voto

Yogesh Rathi Points 3528

Il y a deux façons de procéder.

Première solution

concat avec un 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)" .

utilisation de l'amd String.format(stringResource, upsatename);

0 votes

Je sais que ça marcherait, mais je veux utiliser la méthode concat.

24 votes

Vous pouvez également utiliser des ressources de type chaîne formatée dans l'expression : android:text="@{@string/hello(user.firstName)}"

0 votes

C'est %1$s au lieu de %$1s... ;)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X