layout_marginBottom funktioniert nach addView nicht

Hallo zusammen,

ich versuche mich grad im Bereich Android und baue an meiner ersten App. Dabei bin ich auch ein (merkwürdiges?) Problem gestoßen. Vielleicht hat von euch ja jemand eine Idee.

Folgendes Layout versuche ich zu realisieren:

layout.xml
[spoiler]
[XML]

<?xml version="1.0" encoding="utf-8"?>
<!-- hier ist noch eine box --> 

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="fill_parent">

    <!-- box container -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <!-- box 1 -->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/holo_red_dark"
            android:layout_marginBottom="10px">

            <!-- ein paar weitere Elemente -->
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Test" />
        </LinearLayout>

        <!-- box 2 -->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/holo_red_dark"
            android:layout_marginBottom="10px">

            <!-- ein paar weitere Elemente -->
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Test" />
        </LinearLayout>

        <!-- box 3 -->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/holo_red_dark"
            android:layout_marginBottom="10px">

            <!-- ein paar weitere Elemente -->
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Test" />
        </LinearLayout>
    </LinearLayout>
</ScrollView>
[/XML] [/spoiler]

Kurze Erläuterung: Ganz oben gibt es immer eine Box die ein paar Daten anzeigt. Darunter gibt es dann x-beliebig viele Boxen die man durchscrollen können soll.
Das oben gepostete Layout funktioniert wunderbar.
Wenn ich aber versuche die Boxen 1-3 dynamisch hinzuzufügen (per Schleife im Code und addView) verschwinden die Margins zwischen den roten Boxen. Muss man nach dem adden noch irgendwas aufrufen?

Die dynamische Variante schaut in etwa so aus:

LinearLayout container = (LinearLayout) view.findViewById(R.id.test_container);
for (int i = 0; i < 3; i++) {
    View itemView = inflater.inflate(R.layout.item, viewGroup, false);
    container.addView(itemView);
}

layout.xml
[spoiler]
[XML]

<?xml version="1.0" encoding="utf-8"?>
<Button
    android:id="@+id/notification"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Test Test Test" />

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="fill_parent">

    <!-- container for boxes -->
    <LinearLayout
        android:id="@+id/test_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" />
</ScrollView>
[/XML] [/spoiler]

item.xml
[spoiler]
[XML]

<?xml version="1.0" encoding="utf-8"?>
<!-- ein paar weitere Elemente -->
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Test" />
[/XML] [/spoiler]

Ich sehe da keinen Unterschied. Weiß jemand von euch Rat?

Ich bemüh’ mich jetzt nicht einmal den Fehler zu suchen da dein Ansatz bereits völlig falsch ist. Für so etwas verwendet man eine ListView mit entsprechendem Adapter. Achtung: Sobald man mehr als nur eine TextView in der Liste haben möchte sollte man einen BasicAdapter und keinen ArrayAdapter als Basisklasse verwenden.

Edit:/
Zur Erklärung warum es bei Listen nicht sinnvoll ist das ganze per ScrollView nachzubauen: Du müllst den Speicher des Systems mit jeder View zu. Wenn du eine ListView verwendest hast du nur die sichtbaren Views und wenn eine aus dem Bild kommt wird sie recyclet und automatisch unten wieder angefügt.

Gut für den Speicher! Lässt sich auch leichter optimieren. Stichwort: View Holder Pattern

Ja du hast Recht, für das Vorhaben ist natürlich die ListView der richtige Ansatz. Das Beispiel war schlecht gewählt.

Die Box die im Layout mit “” angedeutet wird, soll eigentlich mit nach oben weg scrollen, also auch in dem ScrollView liegen. Diese Box zeigt eine Zusammenfassung der Daten aus den folgenden Boxen an. Der Aufbau der Box ist unterschiedlich zu den anderen Boxen, weshalb ich da ja nicht so einfach ein ListView verwenden kann, oder?
Ich werde später mal testen ob das Problem bei dem geänderten Aufbau auch besteht.

Warum nicht? Du musst nur deine Liste und den Adapter entsprechend programmieren.

Macht man das auch für Objekte die sehr unterschiedlich sind?
Die obere Box bspw. zeigt an:

  • Gesamtsaldo über alle Konten
  • Gesamtbilanz über alle Konten

Alle anderen Boxen zeigen an:

  • Kontonummer
  • Saldo
  • Datum
  • Einnahmen
  • Ausgaben
  • Umsatzbilanz

Einem ArrayAdapter bspw. müsste man ja einen Typ übergeben. Da würde ich mich bei dieser Konstellation schon schwer tun einen allgemeinen Typen zu finden.

Aso, na das ist wieder was anderes. Warum möchtest du das dann im Java-Code hinzufügen anstatt im XML wie man’s eigentlich macht?