German Problem beim Speichern von Farben

Heinz

Active Member
Licensed User
Longtime User
Hallo, ich habe ein kleines Problem mit meiner App.
Ich möchte die Farben, die der User auswählt, speichern und beim Neustart der
App wieder laden.
Das Ändern der Farbe des jeweiligen Listviews und Anzeigen funktioniert prima.
Wenn ich jetzt die Farben speichere und die App erneut starte, bekomme ich
nur die letzte Farbe, die durch den Colorpicker geändert wurde, gezeigt. Die
anderen Listviews haben dann wieder die Farbe, die ich im Designer eingestellt
hatte. Irgendwie speichere oder lade ich das falsch.
Im Prinzip funktioniert es ja zumindest mit einer Farbe.

Hier mal die beiden Subs :

B4X:
' Menüpunkt Farben in Activity
Private Sub Farben_Click
Dim cd As ColorDialog
Dim listcolors As List
Dim farbe(4) As Int
' a colordialog as the Designer have, would be better ?
Dim sf As Object = cd.ShowAsync("Farbe wählen", "Ja", "Abbruch", "Nein", Null, False)
Wait For (sf) Dialog_Result(Result As Int)
If Result = DialogResponse.POSITIVE Then
    If TabHost1.CurrentTab = 0 Then
      ListView1.Color = cd.RGB
      farbe(0) = cd.RGB
    End If
    If TabHost1.CurrentTab = 1 Then
     ListView2.Color = cd.RGB  
     farbe(1) = cd.RGB
    End If
    If TabHost1.CurrentTab = 2 Then
     ListView3.Color = cd.RGB
     farbe(2) = cd.RGB
    End If  
    If TabHost1.CurrentTab = 3 Then
     ListView4.Color = cd.RGB
     farbe(3) = cd.RGB
    End If
End If
listcolors.Initialize
For i = 0 To 3
    listcolors.Add(farbe(i))
Next
File.WriteList(File.DirInternal, "Farben.csv", listcolors)
End Sub

Private Sub LeseFarben ' SUB wird bei Activity_Create nach dem Laden der Layouts aufgerufen
Dim colorlist As List
colorlist.Initialize
colorlist = File.ReadList(File.DirInternal, "Farben.csv")
ListView1.Color = colorlist.Get(0)
ListView2.Color = colorlist.Get(1)
ListView3.Color = colorlist.Get(2)
ListView4.Color = colorlist.Get(3)
End Sub

Kann vielleicht mal jemand drüber schauen und mir sagen, welchen Gedankenfehler ich hier habe ?
 

Filippo

Expert
Licensed User
Longtime User
Hallo @Heinz ,

Bist du sicher, dass die Farben beim Speichern unterschiedlich sind und beim erneuten Lesen die gleiche sind?
Check das vorher mit:

B4X:
For i = 0 To 3
    listcolors.Add(farbe(i))
    log(farbe(i))
Next

Private Sub LeseFarben ' SUB wird bei Activity_Create nach dem Laden der Layouts aufgerufen
Dim colorlist As List
colorlist.Initialize
colorlist = File.ReadList(File.DirInternal, "Farben.csv")
log(colorlist.Get(0)
ListView1.Color = colorlist.Get(0)
log(colorlist.Get(1)
ListView2.Color = colorlist.Get(1)
log(colorlist.Get(2)
ListView3.Color = colorlist.Get(2)
log(colorlist.Get(3)
ListView4.Color = colorlist.Get(3)
End Sub
 

Heinz

Active Member
Licensed User
Longtime User
B4X:
If Result = DialogResponse.POSITIVE Then
    If TabHost1.CurrentTab = 0 Then
      ListView1.Color = cd.RGB ' siehe hier'
      farbe(0) = cd.RGB
    End If
   ' usw.
Mindestens oben beim SUB Farben_Click werden beim direkten Setzen
der Farben in den einzelnen Listviews die Farben korrekt angezeigt.
Dort sollen sie dann auch gleich in das Array farbe(), sodaß ich immer
die gleiche Reihenfolge habe.
Die habe ich schon mal vorher mit einer Messagebox anzeigen lassen.
Das sind Minus - Werte. Ist das richtig so ?
Bis dahin funktioniert es ja.
Ich probiere dann mal, was ich beim SUB LeseFarben bekomme :

Beim Auswählen und Setzen zeigen mir die Array-Elemente,
wenn ich nacheinander rot, grün, blau, weiß auswähle
-65535 - rot, -16711936 - grün, -16776961 - blau, -1 - weiß
an.
Beim Lesen das erste -1, dann 3 mal 0.
Also immer nur die zuletzt gewählte Farbe.
Daher denke ich, daß da beim Speichern oder Einlesen etwas schief geht.
 

Filippo

Expert
Licensed User
Longtime User
Bitte führe den Code aus, so wie ich geschriegeben habe, und zeige mir die Logs.

Ausserdem sollte die Variable "farbe(4)" nach "Sub Globals" verschoben werden.
 
Last edited:

Filippo

Expert
Licensed User
Longtime User
Hallo @Heinz ,

ich habe mit dein Teil-Code ein Beispiel gemacht.
Statt TabHosts und Listviews habe ich nur Labels verwendet.
1649334100519.png
 

Attachments

  • Colordialog.zip
    9.5 KB · Views: 52

Heinz

Active Member
Licensed User
Longtime User
Mann, bin ich blöd. Jetzt programmiere ich schon jahrzehntelang
auf dem PC und bin auf so einen banalen Programmierfehler
reingefallen.
Natürlich muß ich die Liste und das Array als global defininieren.
Sonst sind sie ja nur in der SUB gültig und werden ja auch dort
immer wieder neu erstellt, sobald ich die SUBs aufrufe.
Nur die Liste wird in jedem SUB gelöscht.

Vielen Dank für den richtigen Schubs. Es funktioniert, wie gewünscht.
 
Top