由于这是该主题的最详细页面,因此我想添加 50 克拉。
我遇到了未调用 OnSharedPreferenceChangeListener 的问题。我的 SharedPreferences 在主 Activity 开始时通过以下方式检索:
prefs = PreferenceManager.getDefaultSharedPreferences(this);
我的 PreferenceActivity 代码很短,除了显示偏好之外什么都不做:
public class Preferences extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// load the XML preferences file
addPreferencesFromResource(R.xml.preferences);
}
}
每次按下菜单按钮时,我都会从主 Activity 创建 PreferenceActivity:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
//start Preference activity to show preferences on screen
startActivity(new Intent(this, Preferences.class));
//hook into sharedPreferences. THIS NEEDS TO BE DONE AFTER CREATING THE ACTIVITY!!!
prefs.registerOnSharedPreferenceChangeListener(this);
return false;
}
注意,在这种情况下,注册 OnSharedPreferenceChangeListener 需要在创建 PreferenceActivity 之后完成,否则主 Activity 中的 Handler 将不会被调用!!!我花了一些甜蜜的时间才意识到……