【问题标题】:onSharedPreferenceChanged called without any preference being changed Andengine LivewallpaperonSharedPreferenceChanged 在没有任何偏好被改变的情况下被调用 Andengine Livewallpaper
【发布时间】:2013-06-07 10:40:46
【问题描述】:

我正在使用 andengine 制作动态壁纸。问题出在设置屏幕上。当我在预览屏幕中按下设置按钮时,我的 onSharedPreferenceChanged() 方法会自动调用..我认为除非我更改某些首选项,否则不应该发生这种情况。下面是我的实现。谁能告诉我我做错了什么?

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);
}



}

【问题讨论】:

    标签: android andengine live-wallpaper


    【解决方案1】:

    问题可能不在于您发布的代码,而在于设置侦听器的代码。在您的代码中查找如下内容:
    sharedPreferences.registerOnSharedPreferenceChangeListener(this);
    并检查是否正确放置。例如,如果您设置侦听器,然后初始化值,您可能希望颠倒该顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 2021-10-22
      • 2012-02-02
      • 2017-03-03
      • 2015-11-17
      相关资源
      最近更新 更多