German TabHost

Heinz

Active Member
Licensed User
Longtime User
Hallo, ich hätte bezüglich des Tabhost ein paar Fragen.
Ich hatte mir so eine Art Einkaufsliste gemacht und möchte das ganze
jetzt verfeinern. Um einen besseren Überblick zu haben, dachte ich mir,
einen TabHost mit etwa folgenden Tabs zu verwenden :
Lebensmittel, Drogerie, Bäckerei, Tiere, Sonstiges.

Jetzt die Frage zum Designer :
Da die Buttons, Editfeld usw. ja bei jedem TAB gleich aussehen und auch
das Gleiche bewirken sollen, dachte ich mir, warum denn für jeden
TAB wieder Buttons usw. erstellen. Ändern täte sich ja nur das Listview.
Da muß halt entsprechend der Anzahl TABs auch die entsprechende
Anzahl Listviews generiert werden.
Diese könnte ich ja beim Start (Activity_Create(FirstTime As Boolean)) mit der
entsprechenden csv-Datei jeweils füttern. Natürlich mit File.Exists vorher
abfragen.
In der Main Layout stünde dann nur der TabHost und ein Ende - Button.

Die Buttons machen ja bei jedem Listview bzw. Tab das gleiche. Also könnte
man doch die .bal Dateien kopieren und jeweiles in 1, 2, 3 usw. neu speichern.
Das jeweilige Listview muß man halt noch ändern bzw. einfügen (Listview1, Listview2, usw.)
Die jeweilige Datei könnte man ja bei TabHost1_TabChanged als File setzen. Bei
TabHost1.CurrentTab erfährt man ja, welcher TAB im Moment angezeigt wird und
könnte entsprechend reagieren.

Wenn ich dort das jeweilige Listview als globales Objekt haben könnte (so ähnlich
wie bei Windows das Handle), könnte man mit einem einzigen Code
wie bei z.B. Sub speichern_Click auskommen. Ich stelle mir eine Variable vor,
der ein Objekt zugewiesen werden kann, etwa so : Listview = Listview1
beim ersten Tab usw.
Man bräuchte also nicht unzählige Buttons usw. erzeugen und immer den
gleichen Code, mit Ausnahme das entsprechende Listview zu ersetzen, dazu schreiben.
Wäre auch aus meiner Sicht kontraproduktiv.

Ist sowas machbar, bevor ich jetzt anfange, unnötig viele Buttons zu kreieren ?
Bei Erels Beispiel werden die Buttons ja vorher deklariert. Das ist ja auch nicht
schlimm, das es nur 3 sind.
Habe mal als Anhang 2 Bilder angehängt, damit man sieht, was ich meine.
Das Main-Layout und das des ersten TAB. Beim 2. Tab würde dann das Listview2
stehen usw.
 

Attachments

  • Main.png
    Main.png
    7.6 KB · Views: 141
  • Tab1.png
    Tab1.png
    15.2 KB · Views: 137

pucki

Active Member
Licensed User
Ich habe das anders gemacht. ;)

Ich habe im HAUPT-Layout Buttons angelegt und jede Menge Panels.

Im Code die Designer-Datei den Panels zugewiesen.

Via Code die Panels unter die Buttons gesetzt, und die Größe angepasst. FERTIG

Sobald ich auf ein Button klicke, wird die Farbe geändert. Alle Panels visible = false gesetzt und das Panel zum Button danach visible = true.

Fertig ist das ganze.

Mir egal ob es schön aussieht. Aber mir gefällt es. Und ich verkaufe nie was.

Sieht so aus.


Auszug aus meinen Einkaufsliste-Prg.:
'Log("---- neustart---")
    Activity.LoadLayout("des_leer")
    prg_ini
   
    my_panel_1.LoadLayout("des_einkauf_1")
       
    my_panel_2.LoadLayout ("des_neuer_artikel")
   
    'Log("ref :" & hp_b_refresh.Top & " " &hp_b_refresh.Height & " - " &GetDeviceLayoutValues)

    my_panel_1.Top =  hp_a_oben.Height ' DipToCurrent((hp_a_oben.Height /  scale_hoch  ) * 100) * faktor_y
    my_panel_1.left  = 0
    my_panel_1.Width =  my_panel_1.Width * faktor_x  ' sorgt für die Anpassung auf JEDES Display.
    my_panel_1.Height = my_panel_1.Height * faktor_y
    my_panel_1.Visible = True
    'my_panel_1.Height = 1300dip

    my_panel_2.Top = 40dip
    my_panel_2.Left = 0
    my_panel_2.Width =  my_panel_2.Width * faktor_x  
    my_panel_2.Height = my_panel_2.Height * faktor_y
   
   
    my_panel_2.Visible = False

end sub

Sub hp_b_ek_neu_art_Click   ' wenn ein neuer Artikel eingegeben werden soll
    hp_a_info.Visible = False
    my_panel_1.Visible = False
    my_panel_2.Visible = True
End Sub


Gruß

Pucki
 

Heinz

Active Member
Licensed User
Longtime User
Hallo,
möchte meine Listen etwas erweitern, indem ich auch Checkboxen zu jedem Eintrag
hinzu fügen möchte. Wenn man einen Eintrag abhakt, gilt der Artikel als gekauft und
man kann den Eintrag für den nächsten Einkauf verwenden, wenn man ihn wieder
demarkiert.
Da bin ich jetzt auf das (x) Customlistview, das ja schon in B4A integriert ist, gestoßen.
Leider finde ich keine richtige Doku, wie man das benutzen kann.

Es soll links eine Checkbox und rechts daneben der Eintrag stehen. Hat das CustomListview
die gleichen Features wie das normale Listview ?

- Eintrag mit Checkbox und Text per Laufzeit anfügen
- Sortierbar (Einträge in sortierte List und wieder zurückspeichern)
- Farbe (.color) änderbar
- einen Eintrag / oder alle löschen
- einen Eintrag (.text) ändern
- Laden und Speichern als CSV (nur die Texte oder vl. auch beides)

Ich würde mich freuen, wenn mir jemand Tipps und Codeschnipsel für die einzelnen Aufgaben
geben könnte. Das xCustomListview, das bei den Bibliotheken erscheint, scheint ja das gleiche zu sein,
wie im Designer das CustomListview ohne x davor.

PS: Ich hätte ja das Scrollview genommen, aber mit diesem hat man kaum Möglichkeiten, was das
Einfügen, Ändern, Löschen usw. betrifft.
 

Filippo

Expert
Licensed User
Longtime User
Hallo Hainz,

Das xCustomListview, das bei den Bibliotheken erscheint, scheint ja das gleiche zu sein,
wie im Designer das CustomListview ohne x davor.
Es sieht nicht nur gleich aus, es ist auch gleich! ;)

PS: Ich hätte ja das Scrollview genommen, aber mit diesem hat man kaum Möglichkeiten, was das
Einfügen, Ändern, Löschen usw. betrifft.
Die Klasse (jetzt als interne Bibliothek) xCustomListview ist abgeleitet von Scrollview mit zusätzlichen Funktionen.

Es soll links eine Checkbox und rechts daneben der Eintrag stehen. Hat das CustomListview
die gleichen Features wie das normale Listview ?
Nein, viel besser!

- Eintrag mit Checkbox und Text per Laufzeit anfügen
Du kannst dein eigenes Layout mit Checkboxen und anderen Dingen für die Einträge erstellen und in xCustomListview laden.

Ich würde mich freuen, wenn mir jemand Tipps und Codeschnipsel für die einzelnen Aufgaben
geben könnte.
Suche im Forum, es gibt sehr viele Beispiele.
 

Heinz

Active Member
Licensed User
Longtime User
Jetzt bin ich auch dahinter gekommen. Ich hatte in den
Beispielen nur den Code gesucht, aber die Layoutdatei
nicht wahrgenommen.
Da braucht es ein extra Layout dafür.
Da kann man ja rein tun was man gerne will.
Das wäre ja sogar mit einem Editfeld editierbar.
Danke für die Info.
 

pucki

Active Member
Licensed User
Ich habe das NICHT mit Checkboxen sondern mit eine Gitter und einen Button gelöst.

Artikel anklicken, dann Button Status ändern anklicken, im Feld neben den Artikel erscheint wahlweise "will haben" o. "Gekauft".

Daneben ist ein 2. Button "Aktualisieren" . Dieser Button schreibt den Status des Artikel in die Datenbank und löscht ALLE gekauften Artikel in der Liste = Neuabfrage der Datenbank mit Filter "will haben".

So habe ich mit ein Klick eine Liste was ich noch kaufen muss. Ohne was zu übersehen.

Im Menü gibt es den Punkt "alle Artikel anzeigen". Wenn ich einkaufen fahren will, lese ich der Reihe nach alle Artikel durch und ändere via Button den Status der Artikel die ich brauche auf "will haben". Das hat für mich den Vorteil das ich ein große Liste von Norm-Artikel habe, und bei den "Nicht Standard-Artikeln" wie z.b. Senf keinen Vergesse. Senf brauche ich ne Tube alle 3-4 Monate mal. Und ich brauche den Artikel nur einmal eingeben.

Also ist eine SQlite-DB dahinter keine schlechte Idee.

Sind nur ein paar Tipps wie ich es gemacht habe.

Gruß

Pucki
 
Top