Android 首选项活动在首选项更改时执行某些操作

Android 首选项活动在首选项更改时执行某些操作,android,sharedpreferences,Android,Sharedpreferences,我有首选xml和以下代码: public class MainActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { @SuppressWarnings("deprecation") @Override public void onCreate(Bundle savedInstanceState) { su

我有首选xml和以下代码:

public class MainActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener
{
    @SuppressWarnings("deprecation")
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        Toast.makeText(getApplicationContext(), "DO SOMETHING", Toast.LENGTH_LONG).show();
    }
}
当一个或多个首选项发生更改时,我希望通过toast消息得到通知。我认为上面的代码应该可以工作,但由于某些原因它不能工作


例如,我的xml文件中有CheckBoxPreference。当我勾选或取消勾选复选框时,我希望得到通知。

您必须像这样设置侦听器,例如:

       PreferenceManager.getDefaultSharedPreferences(this).
                                 registerOnSharedPreferenceChangeListener(this);
或者,如果您不使用默认的共享首选项,您必须获得您的首选项,然后注册它们:

       SharedPreferences preferences = getSharedPreferences("your_shared_prefs", Context.MODE_PRIVATE);
       preferences.registerOnSharedPreferenceChangeListener(this);

您应该注册以收听共享首选项更改:

@Override
    public void onPause() {
        super.onPause();

         getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onResume() {
        super.onResume();

        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

您可以尝试扩展
SharedPreferences
类并手动添加功能……如果我没有使用默认的剪切首选项,这是什么意思?我使用自己编写的xml文件。您可以用不同的方式设置SharedReference。要么你使用默认的共享首选项(我想你会这么做),要么你为首选项提供一些“id”,如我答案的第二部分所示。但是不要困惑,我认为第一种方法是你做什么。