编辑和提交后Android属性不会更新

时间:2011-09-15 22:37:41

标签: android preferenceactivity

在我的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?

非常感谢你的帮助。

2 个答案:

答案 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());
        }
    }
}