Search code examples
androidapplication-settings

Changing CheckBoxPreference inside preference activity


I need to change Check Box Preference inside the Preference activity, but it not seems to work:

public class SettingsActivity extends PreferenceActivity  {

    static CheckBoxPreference autoP;


    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    public static class MyPreferenceFragment extends PreferenceFragment  implements OnSharedPreferenceChangeListener{



        @Override
        public void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.prefs);


            autoP = (CheckBoxPreference)findPreference("autoP");
            autoP.setOnPreferenceChangeListener(autoP_listener);

        OnPreferenceChangeListener autoP_listener = new OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference,Object newValue) {

                autoP.setDefaultValue((String) newValue);

                if (newValue.toString().equals("true"))

                        getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

                    else
                        getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);




                return false;
            }
        };

    }

}

Solution

  • This should work:

    final CheckBoxPreference autoP = (CheckBoxPreference) getPreferenceManager().findPreference("autoP");
    
    autoP.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {            
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            if ((Boolean)newValue == true) {
                getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
            }else {
                getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
            }
            return true;
        }
    });