OnSharedPreferenceChangeListener未被称为#2

时间:2012-11-29 19:49:02

标签: android sharedpreferences

好吧,我开始从Google的android实现这个可怕的代码。未调用OnSharedPreferenceChangeListener。这是我的代码,请你指点一下吗?

班级定义:

private SharedPreferences sPrefs;
private PreferenceChangedListener prefsChangedListener;

我有一个私人内部课程:

private class PreferenceChangedListener implements
        OnSharedPreferenceChangeListener {

    public void onSharedPreferenceChanged(
            SharedPreferences sharedPreferences, String key) {
        if (key == "highThreshold") {
            try {
                highThreshold = Float.parseFloat(sharedPreferences
                        .getString(key, "0"));
            } catch (Exception e) {
            }
        }
    }
}

在OnResume中尝试以下代码并在'Voorkeuren'首选项活动开始后注册侦听器。两者都失败了。

sPrefs = getPreferences(MODE_PRIVATE);
prefsChangedListener = new PreferenceChangedListener(); 
sPrefs.registerOnSharedPreferenceChangeListener(prefsChangedListener );

我定义了一个扩展PreferenceActivity的类Voorkeuren

public class Voorkeuren extends PreferenceActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_voorkeuren, menu);
        return true;
    }
}

我打开如下:

Intent intent = new Intent(getBaseContext(),Voorkeuren.class);
startActivity(intent);

该类显示正常,并在会话之间存储值。但是我的应用程序不应该轮询设置是否已被打开。有任何想法吗?我有一些关于SharedPreferences.Editor的东西,但我不确定它是如何相关的。

1 个答案:

答案 0 :(得分:4)

不确定您的问题是什么以及需要什么。

但是你需要做一个改变。在onResume

中替换它
sPrefs = getPreferences(MODE_PRIVATE);
prefsChangedListener = new PreferenceChangedListener(); 
sPrefs.registerOnSharedPreferenceChangeListener(prefsChangedListener );

sPrefs = PreferenceManager.getDefaultSharedPreferences(this);;
prefsChangedListener = new PreferenceChangedListener(); 
sPrefs.registerOnSharedPreferenceChangeListener(prefsChangedListener); 
onCreate()

中的