0

在我的 PreferenceActivity 的 onCreate 方法中,我设置了一些属性,如下所示:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);      
SharedPreferences.Editor editor = preferences.edit();

editor.putBoolean("pref_mykey", true);

editor.commit();

它似乎工作但视图没有更新,所以当我打开属性时 onCreate 运行并更改值。然后我会在屏幕上看到“旧”值,直到我关闭并重新打开首选项屏幕,然后我才能看到新属性。

提交后我已经尝试过了:

((BaseAdapter) getPreferenceScreen().getRootAdapter()).notifyDataSetChanged();

但是没有任何效果。在我关闭并重新打开 PreferenceActivity 之前,我仍然看到“旧”首选项。

我究竟做错了什么?在 onCreate 方法中设置值后如何刷新 PreferenceActivity?

非常感谢你的帮助。

4

2 回答 2

1

这整天困扰着我,但最终找到了解决方案。

((ListPreference)getPreferenceScreen().findPreference("key_of_preference_in_xml_file")).setValue(code);

您的示例带有布尔值,因此必须根据其偏好进行更改。IE: ((CheckBoxPreference)getPreferenceScreen().findPreference("key_of_preference_in_xml_file")).setChecked(true);

于 2011-10-04T19:44:59.300 回答
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());
        }
    }
}
于 2015-10-16T09:09:39.940 回答