PreferenceActivity在更改首选项时执行某些操作

时间:2014-09-15 13:28:43

标签: android sharedpreferences

我有偏好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 message的通知。我认为上层代码应该可行,但由于某些原因它不会。

我的xml文件中有CheckBoxPreference。当我选中或取消选中CheckBox时,我希望收到通知。

2 个答案:

答案 0 :(得分:1)

你必须像这样设置监听器:

       PreferenceManager.getDefaultSharedPreferences(this).
                                 registerOnSharedPreferenceChangeListener(this);

或者,如果您不使用默认的共享首选项,您必须获取您的首选项然后注册它们:

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

答案 1 :(得分:1)

您应该注册以收听共享偏好更改:

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

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

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

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