मैं Android में एक TextView, डेटा बाइंडिंग Api के लिए दो स्ट्रिंग्स को समेटना चाहता हूं


94

Im DataBindingAndroid लेआउट में विचारों को स्थापित करने के लिए 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 हैलो यूजरनेम प्रदर्शित करे । डेटा बाइंडिंग एपीआई का उपयोग करके इसे कैसे प्राप्त करें।

जवाबों:


242

गंभीर उच्चारण के साथ इसे संक्षिप्त करें (`)

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

तुम्हें पता है, कई मायनों में यह concat इसे यहाँ जाँच कर सकते हैं concat-दो तार-इन-TextView-का उपयोग कर-बाइंडिंग


हाँ, यह काम किया। धन्यवाद । मैं सिंगल इनवर्ड कॉमा (') का उपयोग कर रहा था। ग्रेव एक्सेंट (`) ने मेरे लिए काम किया।
सासंक सुनवल्ली १४'१६ को

@SasankSunkavalli आपकी मदद करने में प्रसन्न है :), हमेशा DataBinding का उपयोग करते समय स्ट्रिंग के लिए गंभीर उच्चारण का उपयोग करें।
रवि

1
मुझे नहीं मिला। मेरे .xml इस विधि के साथ-साथ इस पृष्ठ पर किसी भी अन्य तरीके, कार्यात्मक होने के करीब भी नहीं है। सभी इसे प्रिंट करता है: @{हैलो `+ user.firstName}`
ekashking

यह डेटाबाइंडिंग है?
इगोरगानापोलस्की

71

यह पहले से ही समाधान में से एक में टिप्पणियों में @GeorgeMount द्वारा उत्तर दिया गया है। जो मुझे यहाँ सबसे अच्छा समाधान की तरह लग रहा है।

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

अपने तार में। xml

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

महान! thnx wery
सर्ग बरलाका

Thats मैं क्या देख रहा हूँ :)
Edgar Khimich

48

तार को समाप्‍त करने के कई तरीके

1. स्ट्रिंग संसाधन का उपयोग करना ( स्थानीयकरण के कारण सबसे बेहतर )

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

बस इस तरह से स्ट्रिंग संसाधन बनाएं।

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

2. हार्ड कोडेड कॉनैट

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

3. Stringसमवर्ती विधि का उपयोग करना

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

यहां spaceएक HTML इकाई है जिसे अंदर रखा गया है strings.xml। क्योंकि XMLसीधे एचटीएमएल संस्थाओं या विशेष पात्रों को स्वीकार नहीं करता है। (लिंक एचटीएमएल संस्थाओं)

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

4. उपयोग करना String.format()

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

आपको इस प्रकार में स्ट्रिंग वर्ग को लेआउट में आयात करना होगा।

<?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);


मुझे पता है कि यह काम करेगा, लेकिन मैं
कॉनकैट

23
तुम भी अभिव्यक्ति में स्वरूपित स्ट्रिंग संसाधनों का उपयोग कर सकते हैं:android:text="@{@string/hello(user.firstName)}"
जॉर्ज माउंट

यह% 1 $ s के बजाय% 1 $ s है;)
Rik van 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

मुझे जो सबसे आसान तरीका मिला, वह है "'(सिंगल)" की जगह "(डबल), फॉर एग। आपके पास दो चर हैं,

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

अब संक्षिप्त करने के लिए,

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

0

संभवतः पार्टी के लिए देर हो चुकी है: नीचे कोड भी काम करेगा

android:text='@{@string/hello.concat(user.firstName)}'

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.