German Main activity aktualisieren

DonManfred

Expert
Licensed User
Longtime User
Hallo,

ich bin recht neu mit B4A. Passt auch bisher alles soweit (Tolles Tool!)

Ich schreibe für unsere Firma eine Bestellsoftware womit unsere Monteure Material (Schrauben, cuttermesser usw) beim chef bestellen können.
Ich habe eine Mainactivity wo der Monteur Artikel suchen kann. Er markiert dort dann Artikel (Checkbox), kann eine anzahl eingeben wieviel er braucht um den Artikel dann in einen Warenkorb zu legen.
Die anzahl an Artikeln im Warenkorb wird angezeigt und bei neu aufgenommenen Artikeln auch aktualisiert.

Im nächsten Schritt kann er dann seinen Warenkorb anzeigen lassen den er (evtl. über Tage hinweg) befüllt hat. Dort bekommt er eine letzte chance sich nochmal alles anzugucken. Evtl. die anzahl zu verändern und dann am ende kann er durch einen button ausgelöst die Bestellung an unseren chef rausschicken.

Bis hier passt auch alles und ich habe das auch dank b4a in wenigen Tagen so hinbekommen.

Wenn er die Bestellung abgeschickt hat soll die Ansicht des Warenkorbes verschwinden und er wiedet zur Startseite zurück geleitet werden. Das passt auch soweit. Nun möchte ich aber die Anazhl der im Warenkorb befindlichen Artikel auf jener Startseite wieder aktualisieren...

Wie gehe ich hier am besten vor? von der warenkorb-activity aus eine sub in der Main-Activity aufzurufen hat nicht so recht funktioniert weil die sub in der "unter-activity" nicht bekannt ist.

Kann ich in der mainactivity auf das schliessen der unter-activity reagieren um um dann eine sub auszuführen die die Anzeige der Artikel im Warenkorb aktualisiert?

maorder1.png

maorder2.png


In den Beispielbilder soll die "6" im ersten Bild nach absenden der Bestellung auf 0 gesetzt werden.

Könnt ihr mir Tips geben wie ich da am besten vorgehe?

In der mainactivity würde ich normaleweise eine sub aufrufen die über einen httpjob ein php-script auf dem Server aufruft und das Ergebnis (json) wird dann ausgewertet und aktialisiert besagte anzeige in der Jobdone-Sub zu diesem Job.

B4X:
Sub ExecuteRemoteQuery(Query As String, JobName As String)
   Dim job As HttpJob
   Dim dummy As String

   job.Initialize(JobName, Me)
   job.download2("http://***domain***/b4a.php", Array As String( _ 
      "action", Query, _ 
      "DeviceID", Main.DeviceID, _ 
      "SimSerialNumber", Main.SimSerialNumber, _ 
      "SubscriberID", Main.SubscriberID _ 
   ))
End Sub
Sub JobDone(Job As HttpJob)
[...]
 

klaus

Expert
Licensed User
Longtime User
Ich würde die verschiedenen Daten in Process Global Variablen speichern.
Da sind diese Werte dann überall verfügbar und veränderbar.
Wenn eine Bestellung abgeschickt ist, die verschiednen Werte auf die 'default' zurück setzten.

Beste Grüsse.
 

DonManfred

Expert
Licensed User
Longtime User
Hallo Klaus, danke für deine Antwort!

Ich würde die verschiedenen Daten in Process Global Variablen speichern. Da sind diese Werte dann überall verfügbar und veränderbar.

Auf diese Idee bin ich auch schon gekommen. Also das label nach dem Absenden der Bestellung mit einer "0" im label.Text zu versehen.

Das Label (label_warenkorb in main) ist in main eine globale Variable (der Designer hat das dort ja reingestellt. Also nicht process-global.

Wenn ich aber von der Activity bestellung das Label mittels main.label_warenkorb.text neu beschreiben will dann meckert der Compiler das er das label nicht kennt.

Wenn eine Bestellung abgeschickt ist, die verschiednen Werte auf die 'default' zurück setzten.

Deswegen ja meine Frage ob ich von main aus orgendwie "reagieren" kann, wenn ich in bestellung den Befehl Activity.close (oder so) verwende... Dieses "reagieren" wäre ja in diesem Fall die aktuell dargestellte Liste von Artikeln zu leeren und eben label_warenkorb.text = "0" zu verwenden. ABER ich weiss nicht wie ich auf das schliessen der activity bestellung reagieren kann um diesen Befehl abzusetzen.

Von der activity bestellung aus kann ich das Label ja aus oben genanntem Grund nicht neu setzen. :-/

Ich habe in main eine "merk"-Variable "warenkorb_anzahl". DIE kann ich von bestellung aus auch auf "0" setzen; das klappt auch.... ABER ich muss diese variable ja dann noch irgendwie in das label in main bekommen. Nur wie?

Gruss Manfred
 

klaus

Expert
Licensed User
Longtime User
Das Label label_warenkorb in main muss in Globals bleiben das ist schon richtig !
In Main in Activity_Resume kannst Du
label_warenkorb.Text = warenkorb_anzahl
einfügen.

ABER ich weiss nicht wie ich auf das schliessen der activity bestellung reagieren kann um diesen Befehl abzusetzen.
Wenn Du die Activity Bestellung schliesst und das System auf Main zurück kehrt wird jedes mal Activity_Resume aufgerufen, also der Wert von label_warenkorb jedes mal aktualisiert !

Beste Grüsse.
 

DonManfred

Expert
Licensed User
Longtime User
In Main in Activity_Resume kannst Du
label_warenkorb.Text = warenkorb_anzahl
einfügen.

Wenn Du die Activity Bestellung schliesst und das System auf Main zurück kehrt wird jedes mal Activity_Resume aufgerufen

DAS könnte der entscheidene Hinweis sein den ich gesucht habe... Also die Info das Activity_Resume in main nach dem schliessen der bestellung-activity aufgerufen wird... Damit hätte ich ja meine Möglichkeit zum reagieren.

Ich werde das morgen ausprobieren. Hier schonmal VIELEN DANK für den Hinweis! :sign0188:

Da hätte ich evtl. auch selber drauf kommen können/sollen :BangHead: :D

Gruss Manfred
 
Top