tutorial studio example español ejemplo databinding data android android-layout data-binding android-databinding

android - studio - data binding español



Quiero concat dos cadenas para un TextView en Android, Data Binding Api (7)

Estoy usando DataBinding Api para configurar las vistas en diseños de Android. Aquí está mi diseño.

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>

Quiero que TextView muestre Hello UserName . Cómo lograr esto utilizando la api de enlace de datos.


5 maneras de concat cuerdas

1. Uso de recursos de cadena (lo más preferible debido a la localización )

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

Sólo haz un recurso de cadena como este.

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

2. concat codificado

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

3. Usando String método concat de String .

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

Aquí el space es una entidad html que se coloca dentro de strings.xml . Porque XML no acepta entidades HTML o caracteres especiales directamente. (Enlace de entidades HTML)

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

4. Usando String.format()

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

tienes que importar clase String en diseño en este tipo.

<?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. otro método

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

En este caso, ponga un recurso de cadena en strings.xml

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

Puede haber muchas otras formas, elige una que necesites.


Como xml admite comillas simples para valores de atributo, también puede hacer esto:

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


Esto ya ha sido respondido por @GeorgeMount en comentarios a una de las soluciones. Que para mí parece la mejor solución hasta ahora aquí. Por favor dale un +1

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

en tus cadenas.xml

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


Hay dos maneras.

Primera solucion

concat con grave acento (`)

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

Segunda solucion

strings.xml tu cadena en strings.xml

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

amd use String.format(stringResource, upsatename);


Para hacer un concat en diseño 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)}"

En strings.xml he añadido código para el espacio en blanco:

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


Si quiere concat String resource con datos de su modelo, puede hacerlo de la siguiente manera:

android:text=''@{@string/release_date+model.release_date}''


concítala con acento grave (`)

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