33 votes

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.

88voto

Ravi Points 99

concate avec accent grave (`)

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

11voto

nag prakash Points 145

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

10voto

Khemraj Points 8449

De nombreuses façons de la concaténation de chaînes de caractères

1. L'aide de la chaîne de ressource (Plus préférable en raison de la localisation)

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

Juste faire de la chaîne de ressource de ce genre.

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

2. Codé en dur concat

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

3. À l'aide de Strings'méthode concat

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

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

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

4. À l'aide de String.format()

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

vous devez importer la classe String dans la mise en page de 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 en strings.xml

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

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

6voto

ArJ Points 150

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

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

5voto

Yogesh Rathi Points 3528

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 en strings.xml

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

utilisation am String.format(stringResource, upsatename);

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: