Probleme mit mobileControlCreate „scroller“ und dynamischer ScrollArea

Startseite Foren Deutsches LiveCode-Forum Probleme mit mobileControlCreate „scroller“ und dynamischer ScrollArea

  • Dieses Thema hat 0 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 4 Jahre von roland.
Ansicht von 0 Antwort-Themen
  • Autor
    Beiträge
    • #8573
      roland
      Teilnehmer

      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 OpenCard

      on closeCard
      // Delete the scroller
      if environment() is not „mobile“ then exit closeCard
      mobileControlDelete sScrollerID
      end closeCard

      on scrollerDidScroll hOffset, vOffset
      // When the user scrolls move the displayed content
      set the vScroll of group „grpContainer“ to vOffset
      end scrollerDidScroll

Ansicht von 0 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.