# Realisierung einer dynamischen Tabelle unter Android



## MarderFahrer (19. Apr 2010)

Hallo zusammen,

ich weiß nicht genau wo ich diese Frage am besten stellen sollte. Ein direktes Android Forum gibt es ja nicht. Vielleicht kann mir hier jemand weiterhelfen.
Ich habe einmal versucht eine Beispiel Applikation zu erstellen, welche eine Tabelle dynamisch um eine Reihe erweitert. Den Beispiel Code habe ich aus einem Tutorial. Trotzdem scheine ich es nicht zum laufen zu bekommen. 

Hier der Code:

```
package com.example.helloandroid;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.CompoundButton.OnCheckedChangeListener;

public class HelloAndroid extends Activity {
    /** Called when the activity is first created. */
	TableLayout tl;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.table_layout);
        //Table Try
        /* Find Tablelayout defined in table_layout.xml */
        tl = (TableLayout)findViewById(R.id.myTableLayout);
        //createRow();
        Button bu = (Button)findViewById(R.id.my_table_button);
        bu.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
            	createRow();
              }
        });
    }
    
    public void createRow(){
        /* Create a new row to be added. */
        TableRow tr = new TableRow(this);
        tr.setLayoutParams(new LayoutParams(
                            LayoutParams.FILL_PARENT,
                            LayoutParams.WRAP_CONTENT));
        /* Create a Button to be the row-content. */
        Button b = new Button(this);
        b.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
            	finish();
              }
        });
        b.setText("Dynamic Button");
        b.setLayoutParams(new LayoutParams(
                            LayoutParams.FILL_PARENT,
                            LayoutParams.WRAP_CONTENT));
        /* Add Button to row. */
        tr.addView(b);
        /* Add row to TableLayout. */
        tl.addView(tr,new TableLayout.LayoutParams(
                  LayoutParams.FILL_PARENT,
                  LayoutParams.WRAP_CONTENT));
    }
}
```

Die dazugehörige table_layout.xml :

```
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		 android:id="@+id/myTableLayout"
    		 android:layout_width="fill_parent"
    		 android:layout_height="fill_parent">
    
     <TableRow android:layout_width="fill_parent" android:layout_height="wrap_content">
          <Button android:id="@+id/my_table_button" android:text="Static Button"/>
     </TableRow>
     
</TableLayout>
```

Nach meinem Verständnis müsste der Ablauf folgender sein:
Nach Programm Start habe ich einen Button mit dem Text "Static Button". Dieser Button führt bei Klick die Methode "createRow" aus.
In dieser Methode wird eine neue Table Reihe erzeugt, mit einem Button, welcher "Dynamic Button" als Text besitzt. Zu guter Letzt wird bei Klick auf den dynamisch generierten Button das ganze Programm beendet. 

Was bei mir passiert:
Nach Programmstart habe ich den Button "Static Button". Aber ein Klick auf selbigen führt zu gar keiner Reaktion.

Weiß jemand Rat, was genau hier verkehrt läuft?


----------



## eRaaaa (24. Apr 2010)

Hi,

in Zeile 49 müßte es heißen


```
b.setLayoutParams(new [COLOR="Red"]TableRow.[/COLOR]LayoutParams(
                            LayoutParams.FILL_PARENT,
                            LayoutParams.WRAP_CONTENT));
```


----------



## MarderFahrer (26. Apr 2010)

Hi, 

danke für die Antwort. Funktioniert aber leider immer noch nicht. Der Emulator bricht immer noch mit einem "Unerwarteten Verhalten" ab. 
Das dumme ist ja, dass selbst in der Debug View keine Fehlermeldung geworfen wird die man hier posten könnte.


----------



## MarderFahrer (26. Apr 2010)

Ich habe es inzwischen herausbekommen, was da falsch lief.
Mit dieser Methode funktioniert die dynamische Tabellen Reihen Generierung:


```
public void createRow(){
        /* Create a new row to be added. */
        TableRow tr = new TableRow(this);
             tr.setLayoutParams(new LayoutParams(
                            LayoutParams.FILL_PARENT,
                            LayoutParams.WRAP_CONTENT));
             
        /* Create a Button to be the row-content. */
        Button b = new Button(this);
        b.setText("Dynamic Button");
        //b.setLayoutParams(new LayoutParams(
        //      LayoutParams.FILL_PARENT,
        //      LayoutParams.WRAP_CONTENT));
        
        /* Add Button to row. */
        tr.addView(b);
        
        /* Add row to TableLayout. 
        tl.addView(tr,new TableLayout.LayoutParams(
                  LayoutParams.FILL_PARENT,
                  LayoutParams.WRAP_CONTENT));*/
        
        tl.addView(tr);
    }
```

Im Prinzip zu vorher habe ich "nur" die LayoutParams Befehle für den Button auskommentiert. Denn wofür braucht der Button auch ein Layout? Die darunterliegende TableRow(Zeile 4) hat ja ein Layout und der Button wird dieser einfach nur hinzugefügt (Zeile 16).

Desweiteren habe ich den LayoutParams Befehl für das TableLayout auskommentiert. (Zeile 19-21).
Es genügt die neue TableRow einfach dem TableLayout zu übergeben. Denn in Zeile 4 habe ich bereits der TableRow ein Layout zugewiesen. Zeile 19-21 hätte diesen Schritt beim Hinzufügen auf das TableLayout nur wiederholt.

Ich nehme an, das war das Problem. Ich habe versucht ein und derselben Komponente zwei mal LayoutParams zuweisen zu wollen.

Aber egal. So funktioniert es auf jeden Fall.


----------

