android, Data Binding API의 TextView에 대해 두 개의 문자열을 연결하고 싶습니다.


91

임 사용하여 DataBinding안드로이드 레이아웃의 뷰를 설정하는 API를. 여기 내 레이아웃입니다.

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>

TextView에 Hello UserName 을 표시하고 싶습니다 . 데이터 바인딩 API를 사용하여이를 달성하는 방법.

답변:


233

그것을 concate 액센트 (`)

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

여러 방법으로 연결할 수 있습니다. 여기에서 확인하십시오. concat-two-strings-in-textview-using-databinding


네, 작동했습니다. 감사 . 단일 반전 쉼표 ( ')를 사용했습니다. 억양 (`)이 저에게 효과적이었습니다.
Sasank Sunkavalli

@SasankSunkavalli 도와 드리겠습니다 :), DataBinding을 사용할 때 항상 문자열에 억음 악센트를 사용하십시오.
Ravi

1
이해가 안 돼요. 내 .xml에서이 방법과이 페이지의 다른 방법은 작동하지 않습니다. 다음과 같이 출력됩니다. @{Hello`+ user.firstName}`
ekashking

이것이 DataBinding입니까?
IgorGanapolsky

68

이것은 이미 솔루션 중 하나에 대한 주석에서 @GeorgeMount에 의해 답변되었습니다. 나에게 지금까지 최고의 솔루션처럼 보입니다.

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

strings.xml에서

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

큰! thnx wery
Serg Burlaka

그게 내가 :) 무엇을 찾고 있어요
에드거 Khimich

45

문자열을 연결하는 다양한 방법

1. 문자열 리소스 사용 ( 현지화로 인해 가장 선호 됨 )

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

이렇게 문자열 리소스를 만드십시오.

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

2. 하드 코딩 된 연결

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

3. String의 concat 메서드 사용

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

다음 space은 내부에 배치 된 html 엔티티입니다 strings.xml. 때문에 XML직접 HTML을 엔티티 또는 특수 문자를 허용하지 않습니다. (HTML 엔터티 연결)

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

4. 사용 String.format()

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

이 유형의 레이아웃에서 String 클래스를 가져와야합니다.

<?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. 다른 방법

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

이 경우 문자열 리소스를 strings.xml

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

다른 많은 방법이있을 수 있습니다. 필요한 것을 선택하십시오.


옵션 1이 저에게 효과적이었습니다. 옵션 4가 작동하지 않았습니다. 좁은 어댑터가있는 경우 옵션 1을 권장합니다.
rminaj

10

xml은 속성 값에 작은 따옴표를 지원하므로 다음과 같이 할 수도 있습니다.

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

7

두 가지 방법이 있습니다.

첫 번째 솔루션

억음 악센트 (`)와 연결

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

두 번째 솔루션

문자열 선언 strings.xml

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

amd 사용 String.format(stringResource, upsatename);


나는이 일 것 알고,하지만 난 CONCAT 방식으로 사용할
Sasank Sunkavalli

23
식에서 형식화 된 문자열 리소스를 사용할 수도 있습니다.android:text="@{@string/hello(user.firstName)}"
George Mount

그것의 % 1 $ ... 대신 %의 $의 1의이야)
릭 반 Velzen

6

정적 문자열 및 기타 동적의 경우 이것을 사용할 수 있습니다.

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

동적 데이터의 경우 이것을 사용할 수 있습니다.

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

4

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)}"

strings.xml에서 공백에 대한 코드를 추가했습니다.

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

4

String리소스를 모델의 데이터와 연결하려는 경우 다음 과 같은 방식으로 수행 할 수 있습니다.

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

0

내가 찾은 가장 간단한 방법은 ""(double) 대신 ''(single)을 대체하는 것입니다. 두 개의 변수가 있습니다.

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

이제 연결하려면

android:text='a + " " + b}'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.