1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

"@string"-Refactoring

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von AquaBall, 29.03.2012.

  1. AquaBall, 29.03.2012 #1
    AquaBall

    AquaBall Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    121
    Erhaltene Danke:
    2
    Registriert seit:
    29.02.2012
    Ich steh nun vor der Aufgabe, in meine langsam entstandenes Projekt Ordnung zu bringen.

    Dazu will ich meine z.B. meine Values neu organisieren.

    Definiert in strings.xml
    Code:
    <string name="eTemp">°C</string>
    benützt in layouts:
    Code:
    android:text="@string/eTemp"
    und aufgerufen in div. activities.java:
    Code:
     findViewById(R.id.eTemp) oder getString("optTemperatur", "??")
    .

    Ich finde keine Möglichkeit, das bequem zu korrigieren, wie es bei den meisten Ausdrücken über Refactoring möglich ist.
    Gibt es da einen Weg?

    (Hardcoded Strings rausschmeißen geht ja auch so einfach, aber dann finde ich nichtmal einen direkten Link wie "Aufrufhierarchie", sondern muss einzeln in meinem res/values-Ordner suchen.)
     
  2. Sentence, 30.03.2012 #2
    Sentence

    Sentence Erfahrener Benutzer

    Beiträge:
    242
    Erhaltene Danke:
    51
    Registriert seit:
    27.01.2011
    Phone:
    S3, S6 Edge
    Moin,
    in Eclipse gibts einen Refactor für Strings.

    Dazu markierst du einfach deinen String, dann oben im Menu auf Refactor -> Android -> Extract Android String.

    Dann wird zb aus "Dies ist ein Test" in der strings.xml folgendes erzeugt:
    <string name="dies_ist_ein_test">Dies ist ein Test</string>

    Im Code setzt Eclipse dann
    getString(R.string.dies_ist_ein_test); oder
    getContext().getString(R.string.dies_ist_ein_test);
    an die Stelle.

    War es das, was du suchst?

    MfG
     
  3. AquaBall, 30.03.2012 #3
    AquaBall

    AquaBall Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    121
    Erhaltene Danke:
    2
    Registriert seit:
    29.02.2012
    Danke für die Antwort.

    Das was du beschreibst ist genau das Gegenstück. Diese Extraction wird einem ja fast aufgedrängt und ist sinnvoll.

    Nun hab ich aber x solche Strings, und möcht deren Namen jetzt vereinheitlichen und organisieren:
    Was vor Wochen als "R.string.dies_ist_ein_text" "R.string.dies_ist_ein_anderer_text" und "R.string.sogar_dies_soll_ein_text_sein" definiert wurde, soll nun in "R.string.txtMsgTemperatur", "R.string.txtMsgDruck" und "R.string.txtMsgInhalt" geändert werden. Da dies aber an hundert Stellen passieren soll, muss dazu mühsam jedes .java- und . xml- und .res-File durchsucht werden.

    Während nun bei Methoden/Variablen/... 1 Click reicht, um an ALLEN Stellen den Namen gleichzeitig zu "refactorn" (also umzubenennen), verrät er mir bei R.string.XXX nicht mal, in welcher xml das definiert ist.
    Ein Refactorversuch (von R.string.XXX auf R.string.YYY) scheitert daran, dass er die 'gen.R.java' ändern will, und die xml-Quelle aber trotzdem unberührt lasst.

    Dafür such ich einen sicheren,vollständigen (und bequemen) Weg.
     

Diese Seite empfehlen