Hallo,
ich habe im xml ein GridView angelegt und will dies in Java mit Buttons bestücken.
[XML]
[/XML]
Da ich vorher nicht weiß, wie viele Buttons es werden, erzeuge ich diese in einer for-Schleife. Jeder Button bekommt einen Text, ggf. eine ID und soll klickbar sein.
Aber jedesmal, wenn ich einen Button oder auch ein anderes GUI-Element dem GridView zuweisen will (gridView.addView(button), siehe JavaCode unten Zeile 3), bekomme ich die LogCat-Fehlermeldung:
java.lang.UnsupportedOperationException: addView(View) is not supported in AdapterView
Button button = new Button(this);
gridView.addView(button);```
Die Methode addView() wird mir via Autovervollständigung angeboten und was das mit dem Adapter auf sich hat, weiß ich / verstehe ich nicht. Einen Adapter habe ich nie hinzugefügt. Was noch zu bemerken wäre ist, dass ich dies in einem DialogElement programmiere, in einer DialogFragment-Klasse.
Darum mein Anliegen:
**Wie generiere ich die Buttons für das/den GridView?
Bzw. wie implementiere ich Buttons programmatisch in das xml-GridView**?
Musst die Doku schon noch lesen
Die GridView funktioniert wie eine ListView und nicht wie eine normale GroupView. Soll heißen du musst einen Adapter hinzufügen.
Allerdings verstehe ich die Verwirrung. So Runtime-Exceptions sind echt schlechter Stil und ein Armutszeugnis für die Android-API.
Danke Schlingel!
Leider macht mir der Adapter auch Sorgen. ArrayAdapter<String> adapter = new ArrayAdapter<String>(activity, android.R.layout.simple_list_item_activated_1, act.getListOfUnitAmount()); grdUnitAmount.setAdapter(adapter);
Ich bekomme die Fehlermeldung
You must supply a ressource ID for a TextView
, sofern die zweite Zeile nicht auskommentiert ist.
Aber ich habe kein TextView, will und brauche keinen.
Anders ausgedrückt, ich weiß nicht was ich machen soll. 
außerdem:
bekomme ich für den Parameter „android.R.layout…“ die Warnung
Field requires API level 11 (current min is 9): android.R.layout#simple_list_item_activated_1
. Ich programmiere aber für die API 10.
Da ich das GridView in einer DialogFragment-Klasse erzeuge steht dort statt „this“ activity als Parameter. activity ist die aufrufende Activity.
act.getListOfUnitAmount() ist ein String-Array.
grdUnitAmount ist ein GridView.
Bau dir einen eigenen Adapter der von SimpleAdapter oder BaseAdapter erbt. ArrayAdapter ist da ganz schlecht. Und die TextViews wirst du ja eh nicht brauchen, da du eigene Views benötigst, oder versteh ich das falsch?
Danke für die Hilfe.
Mir wurde es zu kompliziert
und ich arbeite nun einfach mit LinearLayout.
Das geht ganz dufte. 
LinearLayout ll_row = null;
for ( int i = 0; i < act.getListOfUnitAmount().length; i++ ) {
Log.e(TAG, "i: " + i);
if ( i%4 == 0 ) {
Log.e(TAG, i+ "%4 == 0");
if ( i != 0 ) {
llList.addView(ll_row);
}
ll_row = new LinearLayout(activity);
ll_row.setOrientation(LinearLayout.HORIZONTAL);
}
Button btn = new Button(activity);
btn.setText(act.getListOfUnitAmount()**);
btn.setWidth(106);
btn.setHeight(106);
ll_row.addView(btn);
}
llList.addView(ll_row);```
außerdem steckt llList, bzw.ll_units noch in einem ScrollView,
für den Fall, dass es überläuft.
Da musst du allerdings aufpassen, dass es nicht zu viele Elemente werden. Denn im Vergleich zum GridView bekommst du so kein Recycling für nicht sichtbare Elemente geschenkt. Deshalb ist die Gefahr größer von OutOfMemory-Errors u. langsamer als eine GridView ist es auch.
Zudem setzt du die Höhe/Breite mit einem fixen Wert, kann das nicht zu Problemen führen wenn du mehr Elemente anzeigen musst als du Platz hast?
Nö, problematisch ist das (soweit) alles nicht. Es sind immer so zwischen 3 und 10 Buttons, die generiert werden, also nicht viele. Außerdem befindet sich das äußere LinearLayout in einem ScrollView, erweitert sich also automatisch nach unten. 
Danke!