2012-07-16 12 views
6

में एंड्रॉइड वैरिएबल कहीं कहीं मैंने XML दस्तावेज़ में चर का उपयोग करने के तरीके को पढ़ा है। उन्होंने कहा कि यह बहुत आसान है और मुझे लगता है कि यह था। मैंने एंड्रॉइड स्ट्रिंग्स.एक्सएमएल फ़ाइल में सफलतापूर्वक इसका इस्तेमाल किया। मैं इसे पूरे दिन इस तरह इस्तेमाल कर रहा था जब तक अचानक एंड्रॉइड इसे पार्स करने के लिए रुक गया और इसे एक चर की तरह व्यवहार करने के लिए बंद कर दिया। ।स्ट्रिंग्स.एक्सएमएल

<resources> 
<string name="some_string">string1</string> 
<string name="another_string"> {$some_string} trolololo </string> 
</resources> 

और जावा में इसके माध्यम से पहुँचने के:

मैं इस तरह से इसका इस्तेमाल किया getApplicationContext() GetString (R.strings.another_string);

getApplicationContext().getString(R.strings.another_string); 

उत्पादन मैं की तरह स्ट्रिंग प्राप्त करने के लिए प्रयोग किया जाता में:

string1 trolololo 

और अब मैं केवल प्राप्त करते हैं:

{$some_string} trolololo 

किसी को भी किसी भी विचार क्या गलत है है? मुझे पता है कि एंड्रॉइड का एक्सएमएल मानक एक्सएमएल से भिन्न हो सकता है, लेकिन यह काम करने के लिए उपयोग किया जाता है। एए ... किसी भी सलाह के लिए धन्यवाद।

+0

अपनी प्रोजेक्ट की सफाई करने के बाद प्रयास करें, और फिर 'रन' करें। –

+0

एचएम ... मैं सोच रहा हूं, अगर यह int या int जैसे अन्य प्रकारों के साथ भी काम करता है [] – Fraggles

उत्तर

7

यह आपकी समस्या का समाधान होगा:

<resources> 
    <string name="some_string">string1</string> 
    <string name="another_string">@string/some_string trolololo</string> 
</resources> 

अब getApplicationContext().getString(R.strings.another_string) के उत्पादन string1 trolololo हो जाएगा।

+0

दिलचस्प बात यह है कि जब मैं इसे आज़माता हूं, तो मुझे एक त्रुटि मिलती है, 'कोई संसाधन नहीं मिला है जो दिए गए नाम से मेल खाता है मूल्य '@ स्ट्रिंग/some_string trolololo' के साथ 'another_string')। –

+0

[DevGuide] (http://developer.android.com/guide/topics/resources/string-resource।एचटीएमएल # स्ट्रिंग) का कहना है कि एक्सएमएल संसाधन संदर्भों में '@ स्ट्रिंग/स्ट्रिंग_नाम' –

+1

हां, यह एक्सएमएल फाइल है जो त्रुटि फेंक रही है। मैंने लॉक होने से पहले समय में टिप्पणी में इसे संपादित करने का प्रबंधन नहीं किया था। –

0

मुझे यकीन है कि कैसे पहले प्रारंभिक बात आपके द्वारा किए गए कर्ली कोष्ठक के साथ काम कर रहा था, लेकिन मैं पहले इस समस्या का आई है और एक समाधान नहीं मिल सकता है नहीं कर रहा हूँ ..

अब मैं क्या कर उन तारों को अलग से बुला रहा है और रनटाइम के दौरान उन्हें संयोजित कर रहा है।

+0

उस घुंघराले ब्रैकेट का उपयोग करके मैं कुछ स्ट्रिंग मान को संदर्भित कर सकता हूं यह स्थानीय दस्तावेज, और जाहिर है कि मुझे उन्हें जोड़ने के लिए अनुमति दी। – Garet

18

मान लें कि आप another_string में पैरामीटर के रूप में एक स्ट्रिंग मान पास करना चाहते हैं तो आपकी स्ट्रिंग उस तर्क को प्राप्त करने के लिए अच्छी तरह से स्वरूपित नहीं है और यदि आप इसका उपयोग करने का प्रयास करते हैं तो आपका आउटपुट {$some_string} trolololo होगा।

आप String.Format का उपयोग कर अपने तार फ़ॉर्मेट करने के लिए की जरूरत है (स्ट्रिंग, वस्तु ...), तो आप स्ट्रिंग संसाधन में अपने प्रारूप तर्क रख कर ऐसा कर सकते हैं।

<resources> 
<string name="some_string">string1</string> 
<string name="another_string">%1$s trolololo</string> 
</resources> 

अब आप अपने इस तरह आपके आवेदन से तर्क के साथ स्ट्रिंग स्वरूपित करने में सक्षम:

String arg = "It works!"; 
String testString = String.format(getResources().getString(R.string.another_string), arg); 
Log.i("ARG", "another_string = " + testString); 

ऐसा करने से उत्पादन स्ट्रिंग another_string = It works! trolololo हो जाएगा।

एंड्रॉइड डेवलपर्स आधिकारिक दस्तावेज, here पर एक नज़र डालें।

+0

उत्तर के लिए धन्यवाद। मैंने स्ट्रिंग को प्रारूपित करने के लिए पहले से ही यह तरीका देखा है (इससे पहले कि मैं आपके द्वारा पोस्ट किए गए एंड्रॉइड देव। दस्तावेज़ लिंक पर समाधान ढूंढ रहा था)। और - हाँ - इससे मेरी समस्या हल हो जाएगी, लेकिन मैं इन सभी तारों को स्ट्रिंग्स.एक्सएमएल फ़ाइल में रखना चाहता हूं, वहां उन्हें तैयार (संयोजित) करें, और रनटाइम प्री-तैयार स्ट्रिंग के दौरान इनका उपयोग करें। एक बात जिसे मैं समझ नहीं पा रहा हूं वह क्यों काम कर रहा था, और अब यह नहीं है? – Garet

संबंधित मुद्दे