8

I am using SWITCH (like android toggle button ) instead of normal buttons in my andorid app. The code works fine while enabling and disabling switches. But i want to store the state of the switch. Suppose i enable the switch and close my application the background code will run fine but the switch state will change to disabled.

Every time when i close the application the switch state becomes disabled. Is there any way to store the switch State??

Aakash Gandhi
  • 253
  • 1
  • 3
  • 11
  • 1
    Use shared preferences or a database to store the state of your switch. It is essential that you depend on the lifecycle methods of Activity/fragment. – Skynet Feb 18 '15 at 12:56
  • Use sharedpreference to store the state. Refer this link http://stackoverflow.com/questions/23919338/how-to-store-a-boolean-value-using-sharedpreferences-in-android – Fahim Feb 18 '15 at 13:03

2 Answers2

17

Use shared preferences or a database to store the state of your switch. It is essential that you depend on the lifecycle methods of Activity/fragment.

The following might help you:

@Override
public void onClick(View v) 
{
    if (toggle.isChecked()) 
    {
        SharedPreferences.Editor editor = getSharedPreferences("com.example.xyz", MODE_PRIVATE).edit();
        editor.putBoolean("NameOfThingToSave", true);
        editor.commit();
    }
    else
    {
        SharedPreferences.Editor editor = getSharedPreferences("com.example.xyz", MODE_PRIVATE).edit();
        editor.putBoolean("NameOfThingToSave", false);
        editor.commit();
    }
}

The final nail:

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    SharedPreferences sharedPrefs = getSharedPreferences("com.example.xyle", MODE_PRIVATE);
    toggle.setChecked(sharedPrefs.getBoolean("NameOfThingToSave", true));
}

Edit:

The above code is working, however I feel it is a bad practice to get the shared preference values in onCreate, its better to make a loader class which inits your app variables well beforehand in a separate thread.

Update: Wed 24 Jul; 2019:

Android has view model support now - this can be used to handle switch state and persist it across sessions or configuration changes.

Skynet
  • 7,820
  • 5
  • 44
  • 80
0
          SharedPreferences pref = getSharedPreferences("save",MODE_PRIVATE);
                    unit.setChecked(pref.getBoolean("first", false));

                            if(isChecked) {
                 SharedPreferences.Editor editor = getSharedPreferences("save"MODE_PRIVATE).edit();
                                    editor.putBoolean("first", true);
                                    editor.apply();
                                    unit.setChecked(true);}

else
{
    SharedPreferences.Editor editor = getSharedPreferences("save",MODE_PRIVATE).edit();
                                editor.putBoolean("first",false);
                                editor.apply();
                                kilometer.setText("Km/h");
                                unit.setChecked(false);`enter code here`
}
Aqif
  • 326
  • 3
  • 5