2

I am making a live wallpaper using andengine. The problem is in setting screen. When i press the settings button in the preview screen, my onSharedPreferenceChanged() method is called automatically.. which i think should not happen unless i am changing some preferences. Below is my implementation. Can someone tell me what wrong am i doing?

public class LiveWallpaperSettings extends PreferenceActivity implements OnSharedPreferenceChangeListener{

ListPreference listPreferencespeed, listPreferenceConst, listPreferenceCld;
public static boolean mSettingsChanged = false;

@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.prefs);        
    listPreferencespeed = (ListPreference) findPreference("listPref");
    listPreferenceConst= (ListPreference) findPreference("listPrefConst");
    listPreferenceCld = (ListPreference) findPreference("listPrefCld");

}

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

    Log.e("LiveWallpaperSettings", "Key :- " + key);
    SharedPreferences customSharedPreference = getSharedPreferences(key, LiveWallpaperSettings.MODE_PRIVATE);
        SharedPreferences.Editor editor = customSharedPreference.edit();
        editor.putString("Speed",listPreferencespeed.getValue());
        editor.putString("Cld", listPreferenceCld.getValue());
        editor.putString("Const", listPreferenceConst.getValue());
        editor.commit();
        mSettingsChanged = true;

    Log.e("LiveWallpaperSettings", "Speed Value after setting " + customSharedPreference.getString("Speed", ""));
    Log.e("LiveWallpaperSettings", "Cloud Value after setting " + customSharedPreference.getString("Cld", ""));
    Log.e("LiveWallpaperSettings", "Constellations Value after setting " + customSharedPreference.getString("Constd", ""));
    Log.e("LiveWallpaperSettings", "mSettingsChanged " + mSettingsChanged);
}



@SuppressWarnings("deprecation")
@Override
protected void onResume() {
    super.onResume();
    // Set up a listener whenever a key changes
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}

@SuppressWarnings("deprecation")
@Override
protected void onPause() {
    super.onPause();
    // Unregister the listener whenever a key changes
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}



}
Swati Rawat
  • 1,729
  • 1
  • 19
  • 34

1 Answers1

0

The problem may not be in the code you posted, but rather in the code that sets the listener. Look in your code for something like this:
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
and examine if it is correctly placed. For example, if you set the listener, then initialize the values, you may want to reverse that order.

Al Lelopath
  • 6,448
  • 13
  • 82
  • 139