0

onSharedPreferenceChanged isn't called when preferences is changed, I use following code:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings2);
 getFragmentManager().beginTransaction().replace(android.R.id.content, new Frag()).commit();
}

public static class Frag extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.pref);
        getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }
    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        System.out.println(key);
    }
}

pref.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <SwitchPreference android:title="show floating touch" android:defaultValue="false"></SwitchPreference>
</PreferenceScreen>

it doesn't invoke onSharedPreferenceChanged when i change SwitchPreference, why?

chikadance
  • 3,591
  • 4
  • 41
  • 73

2 Answers2

0

the code SwitchPreference doesn't set android:key:

<SwitchPreference android:title="show floating touch" android:defaultValue="false"></SwitchPreference>

when change it to:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <SwitchPreference android:key="show_float_toucher" android:title="show floating toucher" android:defaultValue="false"/>
</PreferenceScreen>

it work

chikadance
  • 3,591
  • 4
  • 41
  • 73
0

I found useful the following link for the same problem :

How to listen for preference changes within a PreferenceFragment?

code sample:

public class PrefActivity extends Activity  {

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

    getFragmentManager().beginTransaction()
            .replace(android.R.id.content, new PrefFragment()).commit();

}

public static class PrefFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
    @Override
    public void onResume() {
        super.onResume();
        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onPause() {
        getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
        super.onPause();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // set xml 
        addPreferencesFromResource(R.xml.pref);

        // set texts correctly
        onSharedPreferenceChanged(null, "");

    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

        if (key.equals("show_float_toucher"))
        {
           //TODO                

        }
    }
}

}

Tip: check you minSdkVersion !

best regards!

Community
  • 1
  • 1
strobering
  • 176
  • 2
  • 7