Mittels Loop Ressourcen initialisieren

  • Antworten:2
pepperonas
  • Forum-Beiträge: 434

26.11.2014, 21:34:38 via Website

Hallo,

ich möchte kurz mal ein Snippet vorstellen und hoffe, dass es der ein oder andere gut gebrauchen kann.

Geht um das Initialisieren von Ressourcen in einem Layout. Gerade wenn man mal eine Activity hat wo mal wieder "alles zusammen läuft" ist einfacher, schneller Code gefragt. Hier das Beispiel anhand von ein paar View-Objekten:

die xml (unvollständig...)

<TextView
            android:id="@+id/alarmprompt0"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textAppearance="@android:style/TextAppearance.Medium"
            android:textColor="#000000"/>

        <TextView
            android:id="@+id/alarmprompt1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textAppearance="@android:style/TextAppearance.Medium"
            android:textColor="#000000"/>

        <TextView
            android:id="@+id/alarmprompt2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textAppearance="@android:style/TextAppearance.Medium"
            android:textColor="#000000"/>

        <TextView
            android:id="@+id/alarmprompt3"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textAppearance="@android:style/TextAppearance.Medium"
            android:textColor="#000000"/>

Vielleicht ist ja hier schon dem ein oder anderen aufgefallen, dass die IDs alle recht ähnlich benannt sind. Das hat hier ausnahmsweise mal einen Sinn und ist nicht der Faulheit geschuldet. Denn in der .java werden die Views schließlich wie folgt geladen.

 /* Initialisierung der TextViews über eine Loop */
        for (int i = 0; i < AMOUNT_OF_VALUES; i++)
            mTextView[i] = new TextView(this);

        String ids[] = new String[AMOUNT_OF_VALUES];
        for (int i = 0; i < AMOUNT_OF_VALUES; i++)
            ids[i] = "alarmprompt" + Integer.toString(i);

        for (int i = 0; i < AMOUNT_OF_VALUES; i++) {
            int resID = getResources().getIdentifier(ids[i], "id", "xyz.deine.app");
            mTextView[i] = (TextView) findViewById(resID);
        }

        mTextView[9].setText("Hello");

Global ist in der Java Klasse natürlich noch das Array bekannt gemacht geworden und praktischerweise noch eine Konstante, die die Anzahl der Elemente hält. Also so:

static final int AMOUNT_OF_VALUES = 11;

TextView mTextView[] = new TextView[AMOUNT_OF_VALUES];

Viel Spaß damit

Open Source

Antworten
Fabian Simon
  • Forum-Beiträge: 359

28.11.2014, 11:43:10 via Website

Warum machst du :

 for (int i = 0; i < AMOUNT_OF_VALUES; i++) mTextView[i] = new TextView(this);//Was bringt das ?? wenn du es unten doch eh wieder überschreibst 
    String ids[] = new String[AMOUNT_OF_VALUES];
    for (int i = 0; i < AMOUNT_OF_VALUES; i++)
        ids[i] = "alarmprompt" + Integer.toString(i);

    for (int i = 0; i < AMOUNT_OF_VALUES; i++) {
        int resID = getResources().getIdentifier(ids[i], "id", "xyz.deine.app");
        mTextView[i] = (TextView) findViewById(resID);
    }

Warum 2 Schleifen ?? und nich

for (int i = 0 ; i < AMOUNT_OF_VALUES;i++){
int resID = getResources().getIdentifier("alarmprompt" +i, "id", "xyz.deine.app");
mTextView[i] = (TextView) findViewById(resID);
}

So sparst du dir zumindest eine Kompeltte schleife da ich den sinn der ersten Schleife nicht verstehe (und ich glaube die Brauch man auch nicht, da du ja am schluss den Arrray feldern wieder neue Werte zuweist) würde sich das ganze auf eine Schleife verkürzen !

Nur als Denkanstoß :)

Das macht den Code (bzw. dessen ausführung noch Schneller !)
Gruß
Fabian

— geändert am 28.11.2014, 11:44:01

pepperonas

Antworten
pepperonas
  • Forum-Beiträge: 434

29.11.2014, 10:51:06 via Website

Tatsache, danke für den Hinweis ;)

Hab ich irgendwie übersehen, hatte vorher auch schon ein paar kleine Flüchtigkeitsfehler drin (das Arbeiten via "String-Replacement" beherbergt bei mir immer viele Fehlerquellen :D)

Open Source

Antworten