অ্যান্ড্রয়েডে ডেটা বাইন্ডিং এপি-তে একটি টেক্সটভিউয়ের জন্য দুটি স্ট্রাকটি সংহত করতে চাই


91

আমি DataBindingঅ্যান্ড্রয়েড বিন্যাসে ভিউ সেট করার জন্য এপিআই ব্যবহার করছি। এখানে আমার লেআউট।

বিন্যাস.এক্সএমএল

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

আমি টেক্সটভিউটি হ্যালো ব্যবহারকারী নামটি প্রদর্শন করতে চাই । ডেটা বাইন্ডিং এপিআই ব্যবহার করে এটি কীভাবে অর্জন করা যায়।

উত্তর:


233

এটি গুরুতর উচ্চারণের সাথে সমাপ্ত করুন (`)

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

আপনি এটি একাধিক উপায়ে সংঘবদ্ধ করতে পারেন, এটি এখানে পরীক্ষা করুন কনট্যাট-টু-স্ট্রিং-ইন-টেক্সটভিউ-ডাটাবেইন্ডিং ব্যবহার করে


হ্যাঁ এটা কাজ করে। ধন্যবাদ আমি সিঙ্গল ইনভার্টেড কমা (') ব্যবহার করছিলাম। গ্রেভ অ্যাকসেন্ট (`) আমার জন্য কাজ করেছে।
সাসঙ্ক সানকাওয়াল্লি

@ সাসঙ্কসুঙ্কাওয়ালি আপনাকে সাহায্য করে আনন্দিত :), ডাটাবাইন্ডিং ব্যবহার করার সময় সর্বদা স্ট্রিংয়ের জন্য গুরুতর উচ্চারণ ব্যবহার করুন।
রবি

4
আমি পাই না। আমার .xML এ এই পদ্ধতির পাশাপাশি এই পৃষ্ঠার অন্য কোনও পদ্ধতিতে কার্যক্ষম হওয়ার কাছাকাছিও নয়। এটি যা কিছু করে তা হ'ল: @{হ্যালো use + ব্যবহারকারীর প্রথম নাম} `
4'19

এটি কি ডাটাবেইন্ডিং?
ইগোরগানাপলস্কি

68

এটি ইতিমধ্যে সমাধানগুলির একটিতে মন্তব্যে @ জর্জিমাউন্ট দ্বারা উত্তর দেওয়া হয়েছে। আমার কাছে যা এখন পর্যন্ত সেরা সমাধানের মতো দেখাচ্ছে।

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

আপনার স্ট্রিং.এক্সএমএল এ

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

দুর্দান্ত! thnx wery
সার্জ বুরলাকা

আমি যা খুঁজছি তা
হ'ল

45

কনক্রিট স্ট্রিং করার অনেকগুলি উপায়

1. স্ট্রিং রিসোর্স ব্যবহার ( স্থানীয়করণের কারণে সবচেয়ে পছন্দনীয় )

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

এই জাতীয় স্ট্রিং রিসোর্স তৈরি করুন।

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

2. হার্ড কোডেড কনক্যাট

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

৩. Stringএর কনক্যাট পদ্ধতিটি ব্যবহার করা

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

এখানে spaceএকটি এইচটিএমএল সত্তা রয়েছে যা ভিতরে রাখা হয়েছে 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

যেহেতু এক্সএমএল বৈশিষ্ট্যের মানগুলির জন্য একক উদ্ধৃতি সমর্থন করে, আপনি এটিও করতে পারেন:

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)}"
জর্জ মাউন্ট

এটি% $ 1s এর পরিবর্তে% 1 $ s ...;)
রিক ভ্যান ভেলজেন

6

স্ট্যাটিক স্ট্রিং এবং অন্যান্য গতিশীল ক্ষেত্রে আপনি এটি ব্যবহার করতে পারেন

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

গতিশীল ডেটার ক্ষেত্রে আপনি এটি ব্যবহার করতে পারেন।

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

4

এক্সএমএল লেআউটে একটি কনক্যাট করতে:

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

স্ট্রিং.এক্সএমএলে আমি ফাঁকা জায়গার জন্য কোড যুক্ত করেছি:

<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}'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.