Saya ingin menggabungkan dua string untuk TextView di android, Data Binding Api

91

Saya menggunakan DataBindingApi untuk menyetel tampilan di tata letak android. Ini tata letak saya.

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>

Saya ingin TextView menampilkan Hello UserName . Cara mencapai ini menggunakan api data binding.

Sasank Sunkavalli
sumber

Jawaban:

233

gabungkan dengan aksen serius (`)

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

Anda dapat menggabungkannya dengan berbagai cara, periksa di sini concat-two-strings-in-textview-using-databinding

Ravi
sumber
Ya itu berhasil. Terima kasih. Saya menggunakan satu koma terbalik ('). Aksen kuburan (`) cocok untuk saya.
Sasank Sunkavalli
@SasankSunkavalli senang membantu Anda :), selalu gunakan aksen kuburan untuk string saat menggunakan DataBinding.
Ravi
1
Saya tidak mengerti. Di .xml saya, metode ini, serta metode lain di halaman ini, bahkan tidak berfungsi. Yang dilakukannya hanyalah mencetak sebagai: @{Halo `+ user.firstName}`
ekashking
Ini DataBinding?
IgorGanapolsky
68

Ini sudah dijawab oleh @GeorgeMount dalam komentar salah satu solusinya. Yang bagi saya terlihat seperti solusi terbaik sejauh ini.

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

di strings.xml Anda

<string name="location">%1$s, %2$s</string>
Prakash
sumber
Bagus! thnx wery
Serg Burlaka
itulah yang saya cari :)
Edgar Khimich
45

Banyak cara untuk menggabungkan string

1. Menggunakan sumber daya string ( Paling disukai karena pelokalan )

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

Buat saja sumber daya string seperti ini.

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

2. Concat kode keras

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

3. Menggunakan Stringmetode concat

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

Berikut spaceadalah entitas html yang ditempatkan di dalamnya strings.xml. Karena XMLtidak menerima entitas Html atau karakter khusus secara langsung. (Tautkan Entitas Html)

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

4. Menggunakan String.format()

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

Anda harus mengimpor kelas String dalam tata letak dalam tipe ini.

<?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. Metode lain

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

Dalam hal ini, masukkan sumber daya string strings.xml

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

Ada banyak cara lain, pilih salah satu yang Anda butuhkan.

Khemraj
sumber
Opsi 1 berhasil untuk saya. Opsi 4 tidak berhasil. Jika Anda memiliki adaptor yang sempit, saya merekomendasikan Opsi 1.
rminaj
10

Karena xml mendukung tanda kutip tunggal untuk nilai atribut, Anda juga dapat melakukan ini:

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

Ada dua cara.

Solusi Pertama

concat dengan aksen kuburan (`)

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

Solusi Kedua

Deklarasikan string Anda dalam strings.xml

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

amd gunakan String.format(stringResource, upsatename);

Yogesh Rathi
sumber
Saya tahu ini akan berhasil, Tapi saya ingin menggunakan cara concat
Sasank Sunkavalli
23
Anda juga dapat menggunakan sumber daya string yang diformat dalam ekspresi:android:text="@{@string/hello(user.firstName)}"
George Mount
% 1 $ s bukan% $ 1s ...;)
Rik van Velzen
6

Dalam kasus string statis dan dinamika lainnya, Anda dapat menggunakan ini

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

Dalam kasus data dinamis, Anda dapat menggunakan ini.

android:text='@{user.firstName+" "+user.lastName}'
kishan verma
sumber
4

Untuk melakukan concat dalam 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)}"

Di strings.xml saya telah menambahkan kode untuk ruang kosong:

<string name="space">\u0020</string>
Siap Android
sumber
4

jika Anda ingin menggabungkan Stringresource dengan data dari model Anda, Anda dapat melakukannya dengan cara seperti ini:

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

Cara paling sederhana yang saya temukan adalah mengganti '' (tunggal) di tempat "" (ganda), Untuk Misalnya. Anda memiliki dua variabel,

<variable name="a" type="String" />
<variable name="b" type="String" />

Sekarang untuk menggabungkan,

android:text='a + " " + b}'
Aziz
sumber