Ich möchte zwei Zeichenfolgen für eine TextView in Android, Data Binding Api, verketten

Lesezeit: 4 Minuten

Benutzer-Avatar
Sasank Sunkavalli

Ich benutze DataBinding API zum Einstellen der Ansichten in Android-Layouts. Hier ist mein 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>

Ich möchte, dass die TextView angezeigt wird Hallo Benutzername. So erreichen Sie dies mit der Datenbindungs-API.

Benutzer-Avatar
Ravi

verkette es mit Gravis (`)

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

Sie können es auf verschiedene Arten zusammenfassen, überprüfen Sie es hier concat-two-strings-in-textview-using-databinding

  • Ja es hat funktioniert. Vielen Dank . Ich habe ein einzelnes Hochkomma (‘) verwendet. Grave Accent (`) hat bei mir funktioniert.

    – Sasank Sunkavalli

    14. Oktober 2016 um 9:46 Uhr

  • @SasankSunkavalli freut sich, Ihnen zu helfen 🙂 , verwenden Sie immer den gravierenden Akzent für Zeichenfolgen, wenn Sie DataBinding verwenden.

    – Ravi

    14. Oktober 2016 um 9:47 Uhr

  • Ich verstehe es nicht. In meiner .xml-Datei ist diese Methode sowie alle anderen Methoden auf dieser Seite nicht einmal annähernd funktionsfähig. Alles, was es tut, ist druckt als: @{Hallo ` + user.firstName}`

    – ekashking

    4. November 2019 um 3:34 Uhr


  • Das ist DataBinding?

    – IgorGanapolsky

    27. Dezember 2019 um 22:10 Uhr

Benutzer-Avatar
Prakasch

Dies wird bereits von @GeorgeMount in Kommentaren zu einer der Lösungen beantwortet. Was für mich hier bisher die beste Lösung zu sein scheint.

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

in deiner strings.xml

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

  • Großartig! Danke

    – Serg Burlaka

    19. September 2018 um 11:16 Uhr

  • das suche ich 🙂

    – Edgar Chimich

    25. März 2019 um 2:35 Uhr

Benutzer-Avatar
Khemraj Sharma

Viele Möglichkeiten, Strings zu verketten

1. String-Ressource verwenden (Aufgrund der Lokalisierung am meisten bevorzugt)

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

Erstellen Sie einfach eine Zeichenfolgenressource wie diese.

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

2. Fest codierte Verknüpfung

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

3. Verwenden String‘s concat-Methode

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

Hier space ist eine HTML-Entität, die darin platziert wird strings.xml. Da XML akzeptiert HTML-Entitäten oder Sonderzeichen nicht direkt. (Html-Entitäten verknüpfen)

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

4. Verwenden String.format()

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

Sie müssen die String-Klasse in das Layout dieses Typs importieren.

<?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. Eine andere Methode

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

Fügen Sie in diesem Fall eine String-Ressource ein strings.xml

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

Es kann viele andere Möglichkeiten geben, wählen Sie eine, die Sie benötigen.

  • Variante 1 hat bei mir funktioniert. Möglichkeit 4 hat nicht funktioniert. Wenn Sie einen schmalen Adapter haben, empfehle ich Option 1.

    – rminaj

    12. Juli 2019 um 9:30 Uhr

Da xml einfache Anführungszeichen für Attributwerte unterstützt, können Sie auch Folgendes tun:

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

Im Fall von statischen Zeichenfolgen und anderen dynamischen können Sie dies verwenden

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

Bei dynamischen Daten können Sie dies verwenden.

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

Es gibt zwei Möglichkeiten.

Erste Lösung

concat mit Gravis (`)

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

Zweite Lösung

Deklarieren Sie Ihre Zeichenfolge in strings.xml

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

und verwenden String.format(stringResource, upsatename);

Benutzer-Avatar
Fertiges Android

So führen Sie eine Verkettung im XML-Layout durch:

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

In strings.xml habe ich Code für Leerzeichen hinzugefügt:

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

1335460cookie-checkIch möchte zwei Zeichenfolgen für eine TextView in Android, Data Binding Api, verketten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy