在我的PreferenceActivity的onCreate方法中,我设置了一些像这样的属性:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("pref_mykey", true);
editor.commit();
它似乎有效,但View没有更新,因此当我打开属性时onCreate运行并更改值。然后,我将在屏幕上看到“旧”值,直到我关闭并重新打开prefs屏幕,然后我确实看到了新属性。
我在提交后已经尝试过这个:
((BaseAdapter) getPreferenceScreen().getRootAdapter()).notifyDataSetChanged();
但没有任何影响。我仍然会看到“旧”的Prefs,直到我关闭并重新打开PreferenceActivity。
我做错了什么?如何在onCreate方法中设置值后刷新PreferenceActivity?
非常感谢你的帮助。
答案 0 :(得分:1)
这是我整天的错误,但终于找到了解决方案。
((ListPreference)getPreferenceScreen()findPreference( “key_of_preference_in_xml_file”)。)的setValue(代码);
你的例子是一个布尔值,所以它必须根据它的偏好而改变。 IE: ((CheckBoxPreference)getPreferenceScreen()findPreference( “key_of_preference_in_xml_file”)。)setChecked(真);
答案 1 :(得分:0)
如果您使用PreferenceFragment而不是在活动中注入PreferenceScreen。
public class SettingsActivity extends Activity implements ScanFragment.OnFragmentInteractionListener {
private PreferenceScreen prefScreen;
public void setPreferenceScreen(PreferenceScreen prefScreen){
this.prefScreen = prefScreen;
}
@Override
public void onFragmentInteraction(String scanContent) {
// commiting to editor retrieved from preference manager would not refresh view
EditTextPreference pref = (EditTextPreference)this.prefScreen.findPreference(getString(R.string.preference_url_key));
pref.setText(scanContent);
}
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);
((SettingsActivity)this.getActivity()).setPreferenceScreen(this.getPreferenceScreen());
}
}
}