2012-07-16 6 views
6

Gdzieś czytałem, jak używać zmiennych w dokumencie XML. Powiedzieli, że to bardzo proste i myślę, że tak było. Z powodzeniem używałem go w ten sposób w pliku strings.xml systemu Android. Używałem go w ten sposób przez cały dzień, aż nagle android przestał go analizować i przestał traktować go jak zmienną.Zmienne Androida w stringach.xml

I stosuje się w ten sposób:

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

i Java dostępu do niego przez. GetApplicationContext() getString (R.strings.another_string);

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

W wyjściu Kiedyś otrzymać ciąg jak:

string1 trolololo 

a teraz odbierać tylko:

{$some_string} trolololo 

Czy ktoś ma jakiś pomysł co jest nie tak? Wiem, że XML Androida może się różnić od standardowego XML, ale IT UŻYWANE DO PRACY. Awww ... Dzięki za radę.

+0

spróbuj po wyczyszczeniu projektu i uruchom ponownie. –

+0

Hm ... Zastanawiam się, czy działa to również z innymi typami, takimi jak int czy int [] – Fraggles

Odpowiedz

7

To rozwiąże problem:

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

Teraz wyjście getApplicationContext().getString(R.strings.another_string) będzie string1 trolololo.

+0

Interesujące jest to, że gdy próbuję tego, pojawia się błąd: "Nie znaleziono zasobów pasujących do podanej nazwy (w 'another_string' z wartością '@ string/some_string trolololo'). ' –

+0

[DevGuide] (http://developer.android.com/guide/topics/resources/string-resource.html # String) mówi, że w referencjach do zasobów XML '@ string/string_name' –

+1

Tak, jest to plik XML, który rzuca błąd. Nie udało mi się edytować tego w komentarzu przed zamknięciem. –

0

Nie jestem pewien, jak pierwszy początkowy rzeczą, którą zrobiłem była praca z nawiasów klamrowych ale Zabrakło mi w tej kwestii przed i nie mógł znaleźć rozwiązanie ..

Teraz co zrobić Wywołuje te łańcuchy oddzielnie i łączy je podczas pracy.

+0

używając tych nawiasów klamrowych Mogę odwołać się do jakiejś wartości ciągu wewnątrz ten lokalny dokument, i oczywiście to pozwoliło mi je złączyć. – Garet

18

Zakładając, że chcesz przekazać wartość ciągu jako parametr w another_string, twój ciąg znaków nie jest dobrze sformatowany, aby odebrać ten argument, a jeśli spróbujesz go użyć, twoje wyjście będzie {$some_string} trolololo.

Jeśli trzeba formatować ciągi przy użyciu string.Format (łańcuch, Object ...), to można to zrobić poprzez umieszczenie swoich argumentów formatu w zasobie strun.

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

Teraz twoja stanie sformatować ciąg z argumentami z aplikacji tak:

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

Może to ciąg wyjściowy będzie another_string = It works! trolololo.

Zapoznaj się z oficjalną dokumentacją programistów Androida, here.

+0

Dzięki za odpowiedź. Widziałem już tę metodę formatowania ciągu znaków (Wcześniej szukałem rozwiązania na opublikowanym przeze mnie linku do dokumentacji Android). I - Tak - To rozwiązałoby mój problem, ale chciałem umieścić wszystkie te ciągi w pliku strings.xml, przygotować je (połączyć) i użyć ich podczas wstępnie przygotowanych ciągów wykonawczych. Jedyne, czego nie rozumiem, to DLACZEGO działało, a teraz nie jest? – Garet