Android 首选项活动在首选项更改时执行某些操作
我有首选xml和以下代码:Android 首选项活动在首选项更改时执行某些操作,android,sharedpreferences,Android,Sharedpreferences,我有首选xml和以下代码: public class MainActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { @SuppressWarnings("deprecation") @Override public void onCreate(Bundle savedInstanceState) { su
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”,如我答案的第二部分所示。但是不要困惑,我认为第一种方法是你做什么。