मुझे एक Spinner(या एक्सपोज़्ड ड्रॉपडाउन मेनू) बनाने की आवश्यकता है जहां उपयोगकर्ता एक अवधि का चयन कर सकता है, इस मामले में दिनों की राशि। कुछ इस तरह

one day
two days
three days

बाद में मैं इस ऐप का अनुवाद करना चाहता हूं, इसलिए मैं अपने कोड में प्रदर्शित टेक्स्ट का उपयोग नहीं कर सकता, उदा। कुछ इस तरह

if(item.equals("one day"))

अंग्रेजी के अलावा अन्य भाषाओं के लिए असफल हो जाएगा।

इसलिए मैं एक "डिस्प्ले वैल्यू" (उपयोगकर्ता को जो दिखाया गया है, जैसे "एक दिन") और एक तकनीकी आईडी/कुंजी, "1DAY" जैसा कुछ रखना चाहता हूं। Android संसाधन फ़ाइलों के साथ यह कैसे किया जा सकता है?

मुझे अंत में ऐसा कुछ चाहिए:

<!-- give a technical key 1DAY/2DAYS/3DAYS etc to the items -->
<!-- this is just a mockup - how could something like this be really done? -->
<string-array name="duration">
    <item key="1DAY">@string/one_day</item>
    <item key="2DAYS">@string/two_days</item>
    <item key="3DAYS">@string/three_days</item>
    <!-- and so on -->
</string-array>

<!-- these strings could be translated -->
<string name="one_day">one day</string>
<string name="two_days">two days</string>
<string name="three_days">three days</string>
1
stefan.at.wpf 18 मार्च 2020, 23:02

2 जवाब

if(item.equals(getResources().getString(R.string.one_day)))

यह सही भाषा से सही स्ट्रिंग मान प्राप्त करेगा।

संदर्भ के लिए यह पोस्ट देखें।

1
Daniel 18 मार्च 2020, 23:10

एक अन्य विकल्प विशेषता टैग का उपयोग करना है। टैग अपने विचार पर एक कुंजी सहेजें, उदाहरण के लिए, आप इस तरह एक एनम बना सकते हैं:

enum class Days {
  ONE,
  TWO,
  THREE
}

और अपना टैग मैप करें:

fun map(days: Days): Int =
    when(days) {
      ONE -> R.string.one
      TWO -> R.string.two
      else -> R.string.x
    }

तो, दृश्य पास करने के लिए डेटा है:

val exampleDays = Days.ONE
val textId = map(exampleDays)

your_view.text = getString(textId)
your_view.tag = exampleDays

मान पुनर्प्राप्त करने के लिए, केवल टैग प्राप्त करें:

val tag = your_view.tag as Days // cast in Kotlin
if (tag == Days.ONE) 

इस दृष्टिकोण के साथ डुप्लिकेट स्ट्रिंग्स से बचें और स्वच्छ वास्तुकला के साथ काम करने का एक अच्छा तरीका है।

0
Manuel Mato 18 मार्च 2020, 23:38