# tablelayout dynamisch ergänzen



## ThLu (28. Mrz 2012)

Hallo zusammen,

ich möchte ein Layout haben, was wie folgt aussieht:

Name:        Testname
Alter:         25
....
Kentnisse:  
Fach: Englisch Ausprägung: gut    +

Absenden   Abbrechen
--------------------------------------------------------

Bei den Kentnissen möchte ich ein Button mit einem "+" haben und wenn ich da drauf klicke soll das Layout dynamisch ergänzt werden und zwar um zwei TextView und zwei EditText, sodass weitere Eintragungen gemacht werden können. Also:

Name:      Testname
Alter:       25
....
Kentnisse: 
Fach: Englisch  Ausprägung: gut   
Fach: ______   Ausprägung: _____    +

Absenden   Abbrechen

Bei einem nächsten Klick auf das "+"

Name:      Testname
Alter:       25
....
Kentnisse: 
Fach: Englisch   Ausprägung: gut   
Fach: Spranisch Ausprägung: geht so    
Fach: ________ Ausprägung: ______    +

Absenden   Abbrechen


Lässt sich ein TableLayout in der Form dynamisch erweitern, dass ich sage "Füg an einer bestimmten Stelle eine TableRow ein? Oder kann man die nur ans Ende dynamisch anhängen? Das Problem ist, dass ich sie immer über den beiden Buttons Absenden und Abbrechen haben möchte.
Oder ist die bessere Variante ein TableLayout erstellen, was dynamisch erweitert wird und die Buttons einfach nicht in das TableLayout einfügen, sondern unten drunter schreiben.

Viele Grüße,
Thomas.


----------



## schlingel (29. Mrz 2012)

Du hast hier eine Liste mit komplexen Listen-Elementen, warum bildest du das nicht auch so ab? Das wäre IMHO die saubrere Möglichkeit. 

Dann hättest du für jedes Listenelement ein Objekt, dass du deinem Listen-Adapter hinzufügst und der kümmert sich um den Rest. Du musst dafür einmal definieren wie ein Listen-Element ausschaut, einen Listen-Adapter schreiben und bist fertig.

Die Alternative, bzw. der Weg den du verfolgst, würde so aussehen:
Du erzeugst zur Laufzeit für deine neue Zeile ein TableRow-Objekt, dem fügst du dann deine Cell-Views hinzu in denen dann wieder deine Controls sind.
Das so erzeugte Row-Objekt kannst du dann an die TableView mittels addView(View v, int index) an die Stelle bringen wo du es gern hättest.

Gute Wahl wenn es eine statische Ansicht ist, schlechte Wahl wenn es keine statische Ansicht ist. Denn um das sauber zu halten müsstest du eine ListView nach programmieren. Aber warum solltest du das wollen wenn's die schon gibt?


----------



## Hobelhai (7. Apr 2012)

Es gibt einen Weg: Erzeuge Dir im layout-Ordner (res/layout) ein kleines Layout mit der TableRow als Wurzelelement und den 2 Textfeldern sowie den 2 EditText-Elementen.
Klickt der User jetzt auf das Pluszeichen besorgst Du Dir in der OnClick-Methode (bzw. da, wo Du diese Aktion handelst) einen LayoutInflater.

```
LayoutInflater li = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = li.inflate(R.layout.mein_tablerow_layout, (ViewGroup) this.findViewById(R.id.tableRow));
```
Jetzt kannst Du deiner Activity (bzw. dessen Layout) zur Laufzeit dynamisch neue Elemente hinzufügen.

```
meinLinearLayout.addView(layout);
```
Ich hoffe, das hilft.


----------

