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

StefMa

StefMa

Dauergast
450
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
 
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"
 
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
 
link geht nicht
 
Arg oO

http://goo.gl/XePob

P.s.: Link geht, das weiterleiten von android-hilfe. de geht nicht richtig ;) Also Copy und paste :D
 
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 :)
 
warum nutzt du teilweise px und dip?
 
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....
 
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?
 
deswegen macht man klammern um die schleife

auch wenns nur eine zeile ist :D
 
  • Danke
Reaktionen: the_alien
Möchten wir uns jetzt wegen einer geschweiften Klammer streiten oder mein Problem lösen? :sleep:
 
jaja bleib kuhl
 
Habs gefixt!..

Danke MfG Ice
 
IceClaw schrieb:
Habs gefixt!..

Danke MfG Ice

Lösungen für sich behalten ist genauso uncool wie sich über fehlende Klammern streiten.
 
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
 

Ähnliche Themen

A
  • AnimaAngelo85
Antworten
1
Aufrufe
333
swa00
swa00
MES
Antworten
10
Aufrufe
816
MES
MES
A
Antworten
3
Aufrufe
683
swa00
swa00
Zurück
Oben Unten