German Farbwert übergeben/Togglebutton prüfen

mocca

Member
Hallo,

ich habe hier eine kleine App mit zwei Activitys.

Nun möchte ich von der zweiten Activity,
die Button.textcolor der ersten activity ändern.

Auch anders herum würde ich gerne von
Activity1 überprüfen ob auf Activity2 der Togglebutton gechecked ist oder nicht.

Könnte mir bitte jemand dabei behilflich sein?

Vielen Dank
 

specci48

Well-Known Member
Licensed User
Longtime User
Hallo mocca,

anbei ein schnell implementiertes Beispiel.
Der Austausch funktioniert im Prinzip über globale Variablen, da man Views in inaktiven Activities nicht direkt aktualisieren kann.


Gruß
specci48
 

Attachments

  • 2Activities.zip
    14.2 KB · Views: 183

mocca

Member
Hallo speci48,

danke für deine Antwort,aber leider kommt folgender Fehler.
Kannst du mir bitte ein Beispiel
mit Button.forecolor und Togglebutton.checked posten?
 

Attachments

  • Fehler.png
    Fehler.png
    139.6 KB · Views: 168

specci48

Well-Known Member
Licensed User
Longtime User
Schau dir bitte nochmal mein unverändertes(!) Originalbeispiel an.
- dort ist keine ListView enthalten, die laut deinem Screenshot ein Fehler produziert
- es enthält genau die beiden gewünschten Beispiele

Drückst du in der Activity1 den den Button "ToggleTest", so wird der Status des ToggleButtons aus Activity2 agezeigt.
Drückst du in der Activity2 den den Button "Change Button Color in Main" und gehst zurück zur Activity1, so hat der Button "Textcolor" eine andere Textfarbe bekommen.
 

specci48

Well-Known Member
Licensed User
Longtime User
Du musst im Prinzip jedem ToggleButton einen eigenen Boolean spendieren, der die Information in einer globalen Variablen bereit hält.
Bei 5 ToggleButons also 5 separate globale Booleans. Und jeweils in der CheckedChange Methode der 5 Buttons den richtigen globalen Wert aktualisieren.
 

MaFu

Well-Known Member
Licensed User
Longtime User
Ich würde in dem Fall ein Array verwenden.

Nehmen wir an, Du hast im Designer fünf ToggleButton erstellt und von ToggleButton1 bis ToggleButton5 benannt.
Gib den Buttons im Tag Property eine fortlaufende Nummer mit.
Also bei ToggleButton1 TAG auf 0 setzen, bei ToggleButton2 TAG auf 1, usw.
Allen ein gemeinsames Ereignis "tb" zuweisen.

B4X:
Sub Process_Globals
    Dim toggleState(5) As Boolean
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("layout1")
    'Startinitialisierung falls nötig
    toggleState(0) = ToggleButton1.Checked
    toggleState(1) = ToggleButton2.Checked
    toggleState(2) = ToggleButton3.Checked
    toggleState(3) = ToggleButton4.Checked
    toggleState(4) = ToggleButton5.Checked
   Activity.AddView(tb, 0, 0, 100dip, 100dip)
   tb.Checked = True
End Sub

Sub tb_CheckedChange(Checked As Boolean)
    Dim tb As ToggleButton = Sender
    toggleState(tb.Tag) = Checked
End Sub
 

mocca

Member
@specci48

Jetzt tritt leider wieder ein Problem auf.
Eigentlich funktioniert alles,
nur wenn ich mein Handy neustarte oder die App mit Exitapplication beende,
wird die Textfarbe vom Button nicht gespeichert.


Habe es auch erfolglos mit folgendem Code versucht.

B4X:
Dim m As Map
m.Initialize

m.Put("int1", Button1.Textcolor)
  m.Put("int2", Button1.TextSize)
   m.Put("int3", Button2.Textcolor)
    m.Put("int4", Button2.TextSize)

  File.WriteMap(File.DirInternal, "Test.txt", m)
 
Last edited:

specci48

Well-Known Member
Licensed User
Longtime User
Das Speichern ist ja nur die eine Seite. Wie sieht denn Dein Code aus, um beim erneuten Start der Anwendung die Daten wieder zu laden?
Und wie werden die geladenen Werte wieder den jeweiligen Button-Properties zugeordnet.
Oder hast Du schon getestet, dass bereits die gespeicherten Daten falsch sind?
 

mocca

Member
Habe es so versucht.
Zum speichern

B4X:
Sub Activity_Pause (UserClosed As Boolean)

Dim m As Map
  m.Initialize

  m.Put("int1", neustart.Textcolor)
   m.Put("int2", Recovery.Textcolor)
    m.Put("int3", Bootloader.Textcolor)
     m.Put("int4", Hotreboot.Textcolor)
      m.Put("int5", Ausschalten.Textcolor)

  File.WriteMap(File.DirInternal, "Test.txt", m)

End Sub



zum laden

B4X:
Sub Activity_Resume

Dim m As Map
 m.Initialize

If File.Exists(File.DirInternal, "Test.txt") Then
 m = File.ReadMap(File.DirInternal,"Test.txt")


  neustart.Textcolor = m.Get("int1")
    Recovery.Textcolor = m.Get("int2")
     Bootloader.Textcolor = m.Get("int3")
      Hotreboot.Textcolor = m.Get("int4")
       Ausschalten.Textcolor = m.Get("int5")

End If
 
Last edited:

specci48

Well-Known Member
Licensed User
Longtime User
Also das Speichern und Laden sieht soweit gut aus. Machst du noch irgendetwas anderes mit der Test.txt?
Im Anhang ist wieder ein Minimalbeispiel, dass genau deinen Code enthält und fehlerfrei funktioniert.
Vermutlich liegt der Fehler also woanders.
 

Attachments

  • SaveColors.zip
    12.3 KB · Views: 156

mocca

Member
Hallo,

ja der fehler muss ganz klar woanders liegen,nur finde ich ihn seit Tagen nicht.
Mir fehlt es aber auch an Erfahrung.

Hast du evt. mal Zeit und Lust dir meine App anzusehen?
Könnte es dir mal per Mail zuschicken.

Würde dich nicht fragen,aber ohne deine Hilfe bin ich völlig aufgeschmissen.
 
Top