Button[] und addView(buttons[i]);

  • 14 Antworten
  • Neuester Beitrag
Diskutiere Button[] und addView(buttons[i]); im Android App Entwicklung im Bereich Betriebssysteme & Apps.
StefMa

StefMa

Experte
Hi,

ich lese eine Datenbank aus, wieviele Buttons (in einem array) erstellt werden.

Danach möchte ich die erstellen Buttons auf ein LinearLayout packen. (+ listener)..

Allerdings werden die Buttons ÜBERhAUPT nicht angezeigt..

Layout:
...

<ScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="72dip">

<LinearLayout
android:id="@+id/favoriten_layout"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
</LinearLayout>
</ScrollView>

...
dann der Quelltext dazu:
LinearLayout ll = (LinearLayout) findViewById(R.id.favoriten_layout);

Cursor id = myDB.rawQuery("select _id from "+ table_name + "", null);

while(id.moveToNext())
howLong = howLong + 1;

Button[] buttons = new Button[howLong];

for (int i=howLong; i==0; i--)
{
buttons = new Button(this);
buttons.setText("hallo");
ll.addView(buttons);
}


MfG Ice
 
S

swordi

Lexikon
hmm ich vermute:

dein linearlayout (und auch die scrollview) wird auf höhe 0 gesetzt, da es anfangs keine buttons gibt.

dann fügst du zwar die buttons hinzu, aber die höhe wird nicht angepasst. versuch mal layout_height="fill_parent"
 
StefMa

StefMa

Experte
Hi,

funktioniert leider auch nicht.
Da du von einem Layout problem ausgehst, habe ich mal das Komplette layout angefügt..

Layout: Your code. Your site. Use it. - paste.org
(Die einrückung kommt von paste.org nicht von mir ;)

MfG Ice
 
S

swordi

Lexikon
link geht nicht
 
StefMa

StefMa

Experte
Arg oO

http://goo.gl/XePob

P.s.: Link geht, das weiterleiten von android-hilfe. de geht nicht richtig ;) Also Copy und paste :D
 
T

Tom299

Stammgast
nur mal so als hinweis: du initialisiert in jedem schleifendurchlauf dein array neu. mit cursor.getCount() kann man aber die anzahl der zeilen abfragen und damit hättest du deine array-größe schon im voraus und brauchst nur 1 mal zu initialisieren. ansonsten würde ich ne array-list nehmen und bei jedem durchlauf mein neues objekt erzeugen und reinstecken. aber das ist wohl geschmackssache ;-)

desweiteren glaube ich, daß du ein index out of bounds bekommen müßtest, weil du setzt howlong im 1. durchlauf schon auf 1, gehst aber in der i-schleife bis auf 0. da müßte wohl dann ein i>0 hin, sonst hast du hier schon mal 2 durchläufe, und das sollte eigentlich falsch sein. vielleicht irre ich mich auch, aber checks mal trotzdem :)
 
S

swordi

Lexikon
warum nutzt du teilweise px und dip?
 
T

the_alien

Experte
PHP:
LinearLayout ll = (LinearLayout) findViewById(R.id.favoriten_layout);

Cursor id = myDB.rawQuery("select _id from "+ table_name + "", null);

while(id.moveToNext())
//howLong wird bei jedem Schleifendurchlauf um 1 erhöht
howLong = howLong + 1; 
//bei jedem Schleifendurchlauf wird buttons neu initialisiert
Button[] buttons = new Button[howLong];
//bei jedem Schleifendurchlauf wird das Array komplett neu gefüllt.
for (int i=howLong; i==0; i--)
{
buttons[i] = new Button(this); 
buttons[i].setText("hallo");
ll.addView(buttons[i]);
}
Wenn deine Datenbank sagt du hast 10 Buttons, dann bekommst du im ersten Durchlauf einen Button. Im zweiten Durchlauf 2 Buttons, dann 3... aber die würden sich addieren. Also: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55 Buttons.

Ganz davon ab, dass dein Code nicht einen Button anzeigt würde das auch nicht das Ergebnis geben was du erwartest wenn die Buttons angezeigt werden....
 
StefMa

StefMa

Experte
warum nutzt du teilweise px und dip?
Bin grade dabei alle px zu dip zu formatieren ;) Anscheinend etwas übersehen..
(Spielt hier aber auch keine Rolle :D)

the_alien:
Ich sehe bei while(id.moveToNext()) keine geschweifte klammer!
=> NUR howLong kriegt in die while-schleife einen +1 ;), der Rest ist unabhängig von der Schleife!

MfG Ice

€dit:
Ganz davon ab, dass dein Code nicht einen Button anzeigt würde
<- genau hierdrum geht es in den Thread ;) Eine Lösung?
 
S

swordi

Lexikon
deswegen macht man klammern um die schleife

auch wenns nur eine zeile ist :D
 
StefMa

StefMa

Experte
Möchten wir uns jetzt wegen einer geschweiften Klammer streiten oder mein Problem lösen? :sleep:
 
S

swordi

Lexikon
jaja bleib kuhl
 
StefMa

StefMa

Experte
Habs gefixt!..

Danke MfG Ice
 
T

the_alien

Experte
IceClaw schrieb:
Habs gefixt!..

Danke MfG Ice
Lösungen für sich behalten ist genauso uncool wie sich über fehlende Klammern streiten.
 
StefMa

StefMa

Experte
Ach hier geht es ums ansehen? :flapper:

Nagut:
Die for(int i = howLong...* war iwie falsch! Deshalb hat er auch keine Buttons ausgegeben, da er sie iwie nicht betrten hat.. Oder sonste was :D

Als ich sie auf int i = 0; i<howLong;i++) geändert habe hat es einwandfrei funktioniert!

MfG Ice