How to reject a change in the onSharedPreferenceChanged () listener

The listener onSharedPreferenceChanged()

does not have a boolean return type like the listener does onPreferenceChanged()


So how can you reject a change after review?

The only way that comes up for me is to keep all the shared settings stored in local variables, and if the check fails, restore the value from the local variable if it passes the update to the local variable.

Is this a double job? Is there a built-in rejection mechanism?


source to share

3 answers

Is this a double job?

I think so. If one part of the code is going to reject this change, why does another part of the code allow it?

Is there a built-in mechanism for rejection?

User input must be confirmed onPreferenceChange

before committing. It looks like the goal is onSharedPreferenceChanged

not validation, but to get the current read-only update when the change was made.

Since other code could have received this callback and act on it, it is too late to be validated during this callback.

Link (javadoc preference):

This class provides a view to be displayed in the action and communicates with SharedPreferences to store / retrieve preference data.



You can use an editor: ( () ), which allows you to make changes atomically and then only trigger a commit if everything is correct. Hope this helps.



This issue is currently working.

Here's the solution:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
        String key) {
    if ("mypref".equals(key)) {
        String value = sharedPreferences.getString(key, "");
        try {
            int v = Integer.parseInt(value);
            // do whatever is needed
        } catch (RuntimeException e) {
            String deflt = ... # fetch default value 
            EditTextPreference p = (EditTextPreference) findPreference(key);



You mainly use setText

to return the default if it doesn't suit your requirements. You can then show a Toast or whatever to inform the user of the problem.



All Articles