Zugriff auf String resource in Java

  • Antworten:10
  • Bentwortet
Panson
  • Forum-Beiträge: 19

01.04.2015, 17:44:25 via Website

Hi,

ich versuche eine Variable der Resourcendatei Strings.xml aus dem Java code zu ändern.

Der Code XML:
Time %1$s

Der Code Java:
String str2 = getResources().getString(R.string.time, t.toString());
String str1=getResources().getString(R.string.time,str2);

Ich glaube irgendwo hab ich einen Denkfehler drinnen (nerd)

Danke für die Hilfe!

∞Panson

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.04.2015, 17:49:09 via Website

in den XMLs kannst du zur Laufzeit nichts ändern.
Du musst das Temporär im Code machen.
Entweder per String#replace oder per String Format (für welches dein String schon vorbereitet ist durch "%1$s ").
Und wieso lädst du den gleichen string in 2 verschiedene Variablen?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Panson
  • Forum-Beiträge: 19

01.04.2015, 18:00:58 via Website

Das mit dem doppelten String war der Kopierteufel. Ich versuche das jetzt schon 2 Std, und bin leicht frustriert. :?

Ich habs dann mit:
String time = String.format(str1,t.toString());
versuch, bekomme jedoch in meine Textview nur "Time %1$s" ausgegeben.

Wenn ich das richtig verstehe ist doch:
String str2 = getResources().getString(R.string.time, t.toString());
meine Referenz auf die .xml-Variable.

Warum kann diese dann nicht direkt zugewiesen werden? (Wie ein Pointer)

Danke nochmal für die Starthilfe. Ich komme eigentlich aus dem C und C# bereich...

Antworten
Panson
  • Forum-Beiträge: 19

01.04.2015, 18:01:17 via Website

Hättest du vielleicht ein Code-Snippet da?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.04.2015, 18:11:11 via Website

Ich versuche dir das zu erklären:

erstmal musst du deinen String aus der XML lesen (Methode kann nur einseitig verwendet werden, vgl. getter in c#)

String str = getResources().getString(R.string.time); //so in der Variable str steht jetzt: "Time %1s".

Und jetzt kannst du damit weiterarbeiten, ich nehme mal an nach dem String zoll ein Zeitstring kommen:

String formattedTime = String.format(str,"deineZeit"); // jetzt müsste in der Variable formattedTime stehen: "Time deineZeit".

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Panson
  • Forum-Beiträge: 19

01.04.2015, 18:47:02 via Website

Die Erklärung ist gut, danke dafür.

Ich habe jetzt deinen Code 1 zu 1 auf eine OnClick-Activity gelegt.
In der mit dem @String/time verknüpften Textview steht jedoch immer noch Time 1%$s.

Fehlt mir da eine Art .refresh() der activity?

Kann doch kein Hexenwerk sein einen String auszugeben (laughing)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.04.2015, 18:51:13 via Website

Ja, wie gesagt, XML lässt sich nicht ändern.
Du musst dann deinen per Code veränderten Sting in die TextView setzen:

deineTextView.setText(formattedTime);

Falls das auch nicht geht, poste mal deinen aktuellen Code.

Lg

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Panson
  • Forum-Beiträge: 19

01.04.2015, 19:01:15 via Website

Ah ok jetzt bin ich bei dir. :)

Welchen Sinn haben dann String resources bei dynamischen Texten? Wäre es da nicht einfacher die Variable direkt in Java zu deklarieren?

Ich habe der TextView die ID tv_time im Designer gegen. Kann diese aber nicht aus der zugehörigen activity class ansprechen.
Muss diese in der Klasse nochmal separat deklariert werden?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.04.2015, 19:11:08 via Website

Bei dynamischen Texten haben sie eigentlcih wenig sinn, da sie ja immer verändert werden.
Dann kannst du einfach eine Variable mit dynamischem Inhalt deklarieren.
Die Resources sind für feste Texte oder standart Werte etc. gedacht. Zudem kann man damit eine App unterstützung von mehren Sprachen beibringen.

Nein, deklarieren muss du sie zwar aber nicht neu erstellen:

TextView tv_time = (TextView)findViewById(R.id.tv_time);
//und dann
tv_time.setText("...");

Aber wenn du wenig Ahnung davon hast, empfehle ich dir die Grundlagen zu lernen.
Zum einen durch Tutorials aus dem Internet und zum anderen durch Bücher (sammlung hier im Forum).

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Panson
  • Forum-Beiträge: 19

01.04.2015, 19:26:12 via Website

Super, funzt :)
Vielen Dank!!

Normal bin ich kein "Forenfrager" (zumindest versuche ich's). Ich google lieber bzw. lese Tuts.
Aber hier hatte ich einfach den Denkfehler drinnen dass die .xml-Variable vom System gepollt wird, und getString()-Variable als Pointer fungiert. (silly)

Gruß
∞Panson

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.04.2015, 19:58:40 via Website

Gut dass es funktioniert :)
Dann setzte deinen Thread bitte noch auf beantwortet, über deinem ersten Post auf Mehr->Beantwortet

Danke

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten