Ich versuche, den Zustand meines Switch zu speichern. Ich habe andere Antworten auf stackoverflow überprüft, habe es aber noch nicht herausgefunden.Speichern Switch-Status mit Einstellungen, boolean nicht speichern
Ich habe für meine Haupttätigkeit eine Umschalttaste (tgbutton) und Schalter (simpleSwitch1). Die Vorliebe für die Umschalttaste funktioniert, aber der Schalter nicht. Ich bin mir nicht sicher, ob ich die Präferenz für den Switch-Button richtig speichere, aber für die meisten anderen Foren/Antworten, die sie getan haben.
Bitte raten,
public class MainActivity extends AppCompatActivity {
Switch simpleSwitch1;
boolean switchState2 = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// initiate view's
simpleSwitch1 = (Switch) findViewById(R.id.simpleSwitch1);
SharedPreferences sharedPrefs = getSharedPreferences("com.example.xyle", MODE_PRIVATE);
simpleSwitch1.setChecked(sharedPrefs.getBoolean("NameOfThingToSave",false));
switchState2 = sharedPrefs.getBoolean("NameOfThingToSave", false);
final ToggleButton tgbutton;
tgbutton = (ToggleButton) findViewById(R.id.toggle);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
tgbutton.setChecked(sharedPreferences.getBoolean("toggleButton", false)); //default is false
tgbutton.setOnClickListener(new ToggleButton.OnClickListener() {
public void onClick(View v) {
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("toggleButton", tgbutton.isChecked());
editor.commit();
}
});
simpleSwitch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
SharedPreferences.Editor editor = getSharedPreferences("com.example.xyz", MODE_PRIVATE).edit();
editor.putBoolean("NameOfThingToSave", true);
editor.commit();
Toast.makeText(MainActivity.this, "This is on " + switchState2, Toast.LENGTH_SHORT).show();
} else {
SharedPreferences.Editor editor = getSharedPreferences("com.example.xyz", MODE_PRIVATE).edit();
editor.putBoolean("NameOfThingToSave", false);
editor.commit();
Toast.makeText(MainActivity.this, "This is off " + switchState2, Toast.LENGTH_SHORT).show();
}
}
});
}
}
Warum nicht zuerst überprüfen, ob onCheckedChanged überhaupt genannt wird, nächste Prüfung, wenn der Boolesche Wert gespeichert wird, und schließlich prüfen, ob der Wert ordnungsgemäß wiederhergestellt werden. – Merlevede
Hey @Merlevede die onCheckedChanged funktioniert, es richtig Toast, wenn ich den Zustand von wahr zu falsch ändern. Mit der Überprüfung, ob der boolesche Wert gespeichert wird, tocaste ich auch den "switchState2" -Wert, der die gespeicherte Präferenz für den Schalterstatus sein sollte, der bei false bleibt, was zeigt, dass er entweder nicht richtig speichert oder wenn switchState2 nicht ist richtig initialisiert. – ojboba
Ihr Toast ist falsch, weil es immer das ursprüngliche switchState2 zeigt, nicht die Präferenz. Es sollte sein: 'Toast.makeText (MainActivity.this," Dies ist: "+ sharedPrefs.getBoolean (" NameOfThingToSave ", false), Toast.LENGTH_SHORT) .show();' – Merlevede