如何在PreferenceFragment中动态设置偏好设置的默认值(而不是通过xml)

5

我找到的大部分示例都展示了在xml中设置默认值的方法。 我需要在代码后端设置默认值。

  1. 像下面代码中调用setDefaultValue(..)这样做是正确的吗?
  2. 如何使此值在用户尝试更改此首选项时显示。目前,我看到了空的EditText。

注意:该值为

Environment.getExternalStorageDirectory().getPath() + "/BasicCommunicationWithAndroid.log"

/storage/sdcard0/BasicCommunicationWithAndroid.log不是null也不是空字符串

    public class SettingsFragment extends PreferenceFragment
    {
        private Preference _pref_log_logFilenameOnSDCard;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);

            loadPreferences();
        }

        private void loadPreferences()
        {
            _pref_log_logFilenameOnSDCard = (Preference) findPreference("pref_log_logFilenameOnSDCard");
            _pref_log_logFilenameOnSDCard.setDefaultValue(Environment.getExternalStorageDirectory().getPath() + "/BasicCommunicationWithAndroid.log");    
        }
    }

在MainActivity的onCreate(..)中,我有:

PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
1个回答

11
我有同样的问题,我的解决方法是这样的:
public class SettingsFragment extends PreferenceFragment {

 @Override
 public void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);

  // Load the preferences from an XML resource
  addPreferencesFromResource(R.layout.settings_fragment);


  ListPreference listPreference = (ListPreference) findPreference("user");
  if(listPreference.getValue()==null) {
      // to ensure we don't get a null value
      // set first value by default
      String defaultValue = "Smith";
      PreferenceManager.getDefaultSharedPreferences(getActivity()).getString("user", defaultValue);
      listPreference.setValue(defaultValue);
  }
  // this part just shows how I set a summary field on the element onChange and initially
  listPreference.setSummary(listPreference.getValue().toString());
  listPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
      @Override
      public boolean onPreferenceChange(Preference preference, Object newValue) {
          preference.setSummary(newValue.toString());
          return true;
      }
  });
 }
}

所以只需使用此部分:
PreferenceManager.getDefaultSharedPreferences(getActivity()).getString("user", defaultValue);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接