German Toggle nach Neustart aktiv halten?

conman

Member
Hallo,

Ich habe mich jetzt durch die Suche gewurstelt ein bisschen hin und her probiert aber bin nicht zu dem Ergebnis gekommen das ich wollte.

Wie genau schaff ich es, dass wenn ich im Programm auf einen ToggleButton drücke um beispielsweise das Volumen auf 0 zu setzen, diese Einstellung nach einem neustart immernoch aktiv ist?

bis jetzt hat alles was ich gefunden und umprobiert hab nicht zu meinem gewünschten Erfolg geführt.

mfg.
 

Roeschti

Member
Licensed User
Longtime User
Du koenntest zb. Den Zustand via Settings speichern und beim laden anhand der gespeicherten Settings den toggle Zustand setzen.
 

Kiffi

Well-Known Member
Licensed User
Longtime User
Du koenntest zb. Den Zustand via Settings speichern und beim laden anhand der gespeicherten Settings den toggle Zustand setzen.

@conman: Hierfür könntest Du beispielsweise eine Map verwenden

B4X:
Dim MySettings As Map
MySettings.Initialize()
MySettings.Put("Volume", 0)

Mit File.ReadMap / File.WriteMap kannst Du die Map dann komfortabel
laden und speichern.

Grüße ... Kiffi
 

corwin42

Expert
Licensed User
Longtime User
Dafür gibt es das StateManager Modul von Erel.

Damit lassen sich einfach Einstellungen (also beliebige Key-Value paare) oder auch der Status der GUI-Objekte speichern.
 

conman

Member
Kiffi, wärst du evtl. so nett und würdest mir ein kleines Beispiel geben?
Sub tb_CheckedChange(UserCheckedChange As Boolean)
If UserCheckedChange = True Then
MediaPlayer1.Pause
End If
If UserCheckedChange = False Then
MediaPlayer1.Play
End If

ist die Anweisung. Ist etwas umständlich was ich da geschrieben hab, ja. Aber irgednwie wollte es nich anders.

Oder muss ich die Anweisung aus der map irgendwo unterbringen dort? und was müsste ich definieren?

mfg
 

Kiffi

Well-Known Member
Licensed User
Longtime User
Kiffi, wärst du evtl. so nett und würdest mir ein kleines Beispiel geben?
vielleicht sowas in der Art (den von corwin42 empfohlenen StateManager
habe ich mir jetzt noch nicht genau angeschaut. Vielleicht solltest Du da
vorher einen Blick reinwerfen):

B4X:
Sub Globals

   Dim mySettings As Map

End Sub

Sub Activity_Create(FirstTime As Boolean)

   mySettings.Initialize
   
   If File.Exists(File.DirInternal, "settings.ini") Then
      mySettings = File.ReadMap(File.DirInternal, "settings.ini")
   End If
   
   ' [...]
      
   If mySettings.Get("MediaPlayerPlay") = True Then
      MediaPlayer1.Play   
   Else
      MediaPlayer1.Pause
   End If

End Sub

Sub tb_CheckedChange(Checked As Boolean)
   
   If Checked = True Then
      MediaPlayer1.Pause
   Else
      MediaPlayer1.Play
   End If
   
   mySettings.Put("MediaPlayerPlay", Checked)
   
End Sub

An geeigneter Stelle müsstest Du dann noch die Settings abspeichern:

B4X:
File.WriteMap(File.DirInternal, "settings.ini", mySettings)

Was meinen die anderen?

Grüße ... Kiffi
 

conman

Member
Hallo Kiffi,

ich habe es gerade versucht
Nun sind zwei Probleme:
1. Ich habe einen "NullPointerExeption"
und das zweite: Er speichert zwar den Status des Toggle Buttons, aber die musik geht dennoch wieder an.

mfg
 

Kiffi

Well-Known Member
Licensed User
Longtime User
1. Ich habe einen "NullPointerExeption"
wo?

ich weiß nicht, wie sich eine Map verhält, wenn man auf einen nicht vorhandenen Key zugreifen will. Ändere mal folgendes:

B4X:
If File.Exists(File.DirInternal, "settings.ini") Then
  mySettings = File.ReadMap(File.DirInternal, "settings.ini")
Else
  ' sollte 'settings.ini' noch nicht vorhanden sein, dann hier erstmal einen Default-Wert setzen
  mySettings.Put("MediaPlayerPlay", True) ' Wenn der MP beim ersten Start nicht laufen soll, dann hier False eintragen
End If


und das zweite: Er speichert zwar den Status des Toggle Buttons, aber die musik geht dennoch wieder an.
mh, so ohne Code kann ich dazu nicht viel konkretes sagen.

Grüße ... Kiffi
 

conman

Member
Ich habe den Quellcode mal in eine txt gepackt, wenn du ihn dir anschauen möchtest. Es ist zwar noch etwas unsauber alles aber man kann erkennen wo etwas ist, hoffe ich. Sofern du möchtest natürlich, ich möcht niemandem mehr arbeit machen als gewollt

mfg
 

Attachments

  • code.txt
    2.9 KB · Views: 290

Kiffi

Well-Known Member
Licensed User
Longtime User
liegt wahrscheinlich hieran:

B4X:
Sub Activity_Resume
  MediaPlayer1.Play
  [...]

Nach dem Activity_Create durchläuft der Code auch Activity_Resume.
Kann man schön sehen, wenn man in der IDE mal das Log einschaltet:

LogCat connected to: emulator-5554
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **

Grüße ... Kiffi
 

conman

Member
Fern ab davon, ist es auch merkwürdig das wenn ich die App ganz schließ und wieder öffne die settings wieder weg sind.

Ohne den Resume kann der Sound doch garnich abspielen oder?
Entschuldigung mir fehlt in manchen Punkten noch etwas das logische Verständnis

mfg
 

Kiffi

Well-Known Member
Licensed User
Longtime User
Fern ab davon, ist es auch merkwürdig das wenn ich die App ganz schließ und wieder öffne die settings wieder weg sind.
Du solltest Du Map nach Möglichkeit immer vor Beenden Deiner App speichern.

Ohne den Resume kann der Sound doch garnich abspielen oder?
das entzieht sich meiner Kenntnis. Auf jeden Fall solltest Du nur dann einen
Sound abspielen, wenn "MediaPlayerPlay" = True ist. In Deinem Fall führst Du
Play ja immer aus.

Grüße ... Kiffi
 

conman

Member
So nach vielem Hin und Her habe ich es geschafft damit es wirklich funktioniert, das Play und das Pause war einfach nur vertauscht an einer Stelle.

Nun kommt aber wenn ich das App erneut starte wieder java.long.NullPointer...

Aber ich bin erstmal sehr froh damit diese Funktion soweit funktioniert

mfg
 

conman

Member
Entschuldigung, ich selbst wohl halb am schlafen. Der Fehler kommt nach einem restart, egal wie der toggle eingestellt ist. Es ist weiterhin auch egal ob ich nach demersten Start überhaupt etwas andere am toggle, ich denke also der Fehler ist schon am Anfang beim schreiben und lesen der setting.ini

Mfg
 

conman

Member
Gut das ich die Daten mit auf die Arbeit genommen hab für zwischendurch.

Ich hab es jetzt versucht das writefile in die activity_Pause geschrieben und probiert, immernoch das gleiche

mfg
 

Attachments

  • code.txt
    2.4 KB · Views: 284

Kiffi

Well-Known Member
Licensed User
Longtime User
@conman: Anhand des von Dir geposteten Codes kann ich den Fehler nicht
reproduzieren. Wechselst Du zwischendurch die Activities oder drehst Du Dein
Device?

Grüße ... Kiffi
 
Top