# [Android]Wie dynamischen Button-Feld erstellen?



## Raumsonde (20. Jan 2011)

Wie kann ich in Android ein Buttonfeld erstellen, welches auch während des Programmlaufs geändert
werden kann (für Memoryspiel mit dynamischer Anzahl von Karten)?

MemoryActivity.java:

```
package com.memory;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;

public class MemoryActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Button b = new Button(this); //Button wird nicht angezeigt, warum nicht?
        setContentView(R.layout.main);
        
    }
}
```

main.xml:

```
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
</LinearLayout>
```

Sehe ich das richtig, dass die Buttons nicht in die main.xml eingetragen werden,
da diese nur ein festes Layout geeignet ist und die Anzahl der Buttons sich
während des Programmlaufs ändert?


----------



## Raumsonde (20. Jan 2011)

Das Grundprinzip ist mit inzwischen klar geworden, Buttons kann ich per addView dem
Layout zufügen, allerdings würde ich gerne das XML-Layout verwenden und es nicht
im Programm erzeugen.
main.xml habe ich um eine ID für das Layout erweitert:


```
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lineares_layout"
...
```

Button-Erzeugung mit dynamischen Layout funktioniert:

```
...
Button b = new Button(this);
LinearLayout ll = new LinearLayout(this);
ll.addView(b);
setContentView(ll);
...
```

Allerdings will ich mein XML-Layout verwenden, doch das gibt eine Fehlermeldung:

```
LinearLayout xml_layout = new LinearLayout(this);
LinearLayout xml_layout = findViewById(R.id.lineares_layout); //Type mismatch: cannot convert from View to LinearLayout
xml_layout.addView(b);
setContentView(R.layout.main);
```

Ich kann zwar View xml_layout = ... schreiben, aber dann gibt es Fehlermeldung bei xml_layout.addView(b);

Wie kann ich einer Variablen das in der XML-Datei definierte Layout zuweisen,
wenn dieses die ID lineares_layout hat?


----------



## MarderFahrer (21. Jan 2011)

Also, meine Erfahrung mit Android hält sich zwar in Grenzen, aber auf diese Weise habe ich mit Buttons gearbeitet:

Generell kann man sagen, habe ich die Buttons auf der main.xml definiert und im Quellcode auf selbige zugegriffen und mit Funktionen versehen.
In der main.xml habe ich einen Button folgendermaßen definiert:

```
<Button android:id="@+id/my_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/button"/>
```

Man merke sich die id "my_button". Im Quellcode greife ich wie folgt auf diesen Button zu:

```
final Button myButton = (Button) findViewById(R.id.my_button);
        myButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
              finish();
            }
          });
```

Funktion: Beim Klick auf den Button, beendet sich die Applikation.

Man "erzeugt" also immer noch die Buttons im Quellcode, aber gemäß dem, was in der main.xml definiert ist. Ich denke, dieser Weg müsste der "normale" Weg sein wie man UI Elemente in Android verwendet. Falls nicht, müsste mich jemand bitte verbessern.

Wie gesagt, habe schon länger nichts mehr mit Android gemacht.


----------



## t0s3n (12. Okt 2012)

sowas schonma probiert:

LinearLayout xml_layout = *(LinearLayout)* findViewById(R.id.lineares_layout); //Type mismatch: cannot convert from View to LinearLayout


----------

