Startseite › Foren › Deutsches LiveCode-Forum › Probleme mit mobileControlCreate „scroller“ und dynamischer ScrollArea
Schlagwörter: mobileControlCreate "scroller"
- Dieses Thema hat 0 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 6 Jahren, 4 Monaten von
roland.
-
AutorBeiträge
-
-
November 14, 2018 um 20:55 Uhr #8573
Beim Start einer APP werden von einer SQLite-Datenbank Datensätze gelesen und für jeden Datensatz eine Group erzeugt.
Die Groups werden untereinander auf Card 1 angeordnet (ca. 4 Groups sind sichtbar).Mit dem Plus-Zeichen auf der Header-Bar der Card 1 werden zur Laufzeit neue Datensätze angelegt.
Das Programm wechselt dazu auf die Card 2, auf der die Daten eingegeben und mittels INSERT auf die Datenbank geschrieben werden. Ist der INSERT erfolgreich, werden die entsprechenden Groups angelegt und alphabetisch in die bereits vorhandenen Groups einsortiert. Die Höhe der ScrollArea wird also mit jeder neuen Group vergrößert, bzw. beim Löschen verkleinert.Da es in der Regel mehr Groups gibt, als auf der Card angezeigt werden können, wird mit ‚mobileControlCreate‘ ein Scroller erzeugt, mit dem man durch alle Groups scrollen kann.
Nach dem Start der APP funktioniert der Scroller auch wie erwartet.
Auch nach dem Anlegen eines neuen Datensatzes (also nach dem Hinzufügen einer neuen Group), funktioniert der Scroller; allerdings nur dann, wenn beim Anlegen die ersten 4 Groups auf der Card sichtbar sind.
Scrollt man vor dem Hinzufügen einer neuen Group nach unten (z.B. zur letzten Group), wird die neue Group zwar angelegt, der Scrollbereich wird jedoch so nach unten verschoben, dass auf der Card unter Umständen gar nichts angezeigt wird; erst nach dem ’nach unten Scrollen‘ werden die ersten Groups wieder sichtbar.Beim Wechsel von der Card 2 auf die Card 1 wird der preOpenCard-Handler durchlaufen, wobei die Scroll-Area und die vScroll Property gesetzt werden. Das ist wahrscheinlich der Grund, dass der Scroller unter gewissen Voraussetzungen funktioniert (beim Start der APP und beim Anlegen, wenn die ersten Groups ganz oben in der ScrollArea sichtbar sind.)
Das Löschen einer Group wird in der Card 1 durchgeführt, der preOpenCard -Handler der Card 1 wird also nicht durchlaufen. Daher funktioniert der Scroller nach dem Löschen nicht.
Ich habe viel ausprobiert, z.B eigener Handler, der sowohl nach dem Anlegen als auch nach dem Löschen aufgerufen wird und die entsprechenden Rectangle-Werte für die ScrollArea und für die vScroll-Property übergibt, leider ohne Erfolg.
Folgender Code wird auf der Card 1 verwendet:
(kein Unterschied, ob preOpenCard oder OpenCard Handler verwendet wird)Vielleicht kann mir hierbei jemand helfen.
Für einen guten Tipp wäre ich sehr dankbar.Danke,
Roland.`local sScrollerID
on OpenCard
local tScrollerRect, tContentRect// Only create a scroller on a mobile device
if environment() is not „mobile“ then exit OpenCard// Set the area of the scroller
put the rect of group „grpContainer“ into tScrollerRect// Set the area of the content to be scrolled
— put the left of group „grpScroll“, the top of group „grpScroll“,\
— the right of group „grpScroll“, the formattedHeight of group „grpScroll“ \
— into tContentRect
put 0,0,(the formattedWidth of group „grpScroll“), \
(the formattedHeight of group „grpScroll“) \
into tContentRect// Create the scroller control
mobileControlCreate „scroller“
put the result into sScrollerID// Set the properties of the scroller
mobileControlSet sScrollerID, „rect“, tScrollerRect
mobileControlSet sScrollerID, „contentRect“, tContentRect
mobileControlSet sScrollerID, „visible“, true
mobileControlSet sScrollerID, „scrollingEnabled“, true
mobileControlSet sScrollerID, „vIndicator“, false #true
mobileControlSet sScrollerID, „vscroll“, 0
#pass OpenCard
end OpenCardon closeCard
// Delete the scroller
if environment() is not „mobile“ then exit closeCard
mobileControlDelete sScrollerID
end closeCardon scrollerDidScroll hOffset, vOffset
// When the user scrolls move the displayed content
set the vScroll of group „grpContainer“ to vOffset
end scrollerDidScroll
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.