Android 我的共享pref侦听器不会';听
我关注了Google开发文档,并提出了以下共享首选项活动:Android 我的共享pref侦听器不会';听,android,sharedpreferences,Android,Sharedpreferences,我关注了Google开发文档,并提出了以下共享首选项活动: public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstance
public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Display the fragment as the main content.
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();
}
public static class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
// TODO Auto-generated method stub
Toast.makeText(this, "Pref changed", Toast.LENGTH_SHORT).show();
}
@Override
protected void onResume() {
super.onResume();
getApplicationContext().getSharedPreferences(this.getLocalClassName(), MODE_PRIVATE).registerOnSharedPreferenceChangeListener(this);
//Toast.makeText(this, "registered pref listener", Toast.LENGTH_SHORT).show();
}
@Override
protected void onPause() {
super.onPause();
getApplicationContext().getSharedPreferences(this.getLocalClassName(), MODE_PRIVATE).unregisterOnSharedPreferenceChangeListener(this);
}
}
正如您所看到的,我在onSharedPreferenceChanged方法中有一个简单的toast消息,因此我可以看到它在工作,但它似乎不工作
与Google文档的唯一区别是,我在onResume()中使用getApplicationContext()而不是getPreferenceScreen(),因为getPreferenceScreen()显示为已弃用
我只需要弄清楚为什么它没有监听——我的首选项屏幕上满是复选框,所以我假设,当我单击其中任何一个复选框时,会调用onSharedPreferenceChanged()方法,我会看到我的toast
这个简单的问题把我难住了。你给你的听众注册了一个错误的偏好 SettingsFragment中从XML资源加载的首选项使用默认共享首选项,因此您应该像下面这样注册侦听器:
@Override
public void onResume() {
super.onResume();
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
pref.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
pref.unregisterOnSharedPreferenceChangeListener(this);
super.onPause();
}