2

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



}
4

1 に答える 1

0

問題は投稿したコードではなく、リスナーを設定するコードにある可能性があります。次のようなコードを探します

正しく配置されているかどうかを調べます。たとえば、リスナーを設定してから値を初期化する場合、その順序を逆にしたい場合があります。

于 2013-06-10T19:47:59.457 に答える