Estou usando o DataBinding
Api para definir as visualizações em layouts de Android. Aqui está meu layout.
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>
Eu quero que o TextView exiba Hello UserName . Como fazer isso usando a API de vinculação de dados.
android
android-layout
data-binding
android-databinding
Sasank Sunkavalli
fonte
fonte
@{
Hello `+ user.firstName}`Isso já foi respondido por @GeorgeMount em comentários a uma das soluções. Que para mim parece ser a melhor solução até agora aqui.
android:text="@{@string/location(user.city,user.state)}"
em seu strings.xml
<string name="location">%1$s, %2$s</string>
fonte
Muitas maneiras de concat strings
1. Usando o recurso de string ( mais preferível devido à localização )
android:text= "@{@string/generic_name(user.name)}"
Apenas crie um recurso de string como este.
<string name="generic_name">Hello %s</string>
2. Concat codificado
android:text="@{`Hello ` + user.name}"/>
3. Usando
String
o método concat deandroid:text="@{user.firstName.concat(@string/space).concat(user.lastName)}"
Aqui
space
está uma entidade html que é colocada dentrostrings.xml
. PorqueXML
não aceita entidades Html ou caracteres especiais diretamente. (Vincular entidades Html)<string name="space">\u0020</string>
4. Usando
String.format()
android:text= "@{String.format(@string/hello, user.name)}"
você tem que importar a classe String no layout deste 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. Outro método
android:text="@{@string/generic_name(user.firstName,user.lastName)}"
Neste caso, coloque um recurso de string em
strings.xml
<string name="generic_name">%1$s, %2$s</string>
Pode haver muitas outras maneiras, escolha a que você precisa.
fonte
Como o xml oferece suporte a aspas simples para valores de atributo, você também pode fazer isso:
android:text='@{"Hello "+user.firstName}'
fonte
Existem duas maneiras.
Primeira Solução
concat com sotaque grave (`)
android:text="@{`Hello ` + user.firstName}"/>
Segunda Solução
Declare sua string em
strings.xml
gosto
"Hello %1$s , (whatever you want to add then add here)"
.amd use
String.format(stringResource, upsatename);
fonte
android:text="@{@string/hello(user.firstName)}"
No caso de string estática e outra dinâmica, você pode usar este
android:text="@{`Hello ` + user.firstName}"/>
No caso de dados dinâmicos, você pode usar isso.
android:text='@{user.firstName+" "+user.lastName}'
fonte
Para fazer um concat no layout 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)}"
Em strings.xml, adicionei o código para o espaço em branco:
<string name="space">\u0020</string>
fonte
se quiser concatenar o
String
recurso com os dados do seu modelo, você pode fazer isso da seguinte maneira:android:text='@{@string/release_date+model.release_date}'
fonte
A maneira mais simples que descobri de ser é substituir '' (simples) no lugar de "" (duplo), por exemplo. Você tem duas variáveis,
<variable name="a" type="String" /> <variable name="b" type="String" />
Agora, para concatenar,
android:text='a + " " + b}'
fonte
Provavelmente atrasado para a festa: o código abaixo também funcionará
android:text='@{@string/hello.concat(user.firstName)}'
fonte