Android 如何在PreferenceFragment中动态设置首选项的默认值(而不是通过xml)

Android 如何在PreferenceFragment中动态设置首选项的默认值(而不是通过xml),android,sharedpreferences,Android,Sharedpreferences,我发现的大多数示例都显示了在xml中设置默认值的方法。 我需要在codebehind中设置默认值 在下面的代码中调用setDefaultValue(..)是正确的方法吗 如何在用户尝试更改此首选项时显示此值。我显示了空文本 注:价值 Environment.getExternalStorageDirectory().getPath() + "/BasicCommunicationWithAndroid.log" is/storage/sdcard0/BasicCommunicationWith

我发现的大多数示例都显示了在xml中设置默认值的方法。 我需要在codebehind中设置默认值

  • 在下面的代码中调用setDefaultValue(..)是正确的方法吗
  • 如何在用户尝试更改此首选项时显示此值。我显示了空文本
  • 注:价值

    Environment.getExternalStorageDirectory().getPath() + "/BasicCommunicationWithAndroid.log"
    
    is/storage/sdcard0/BasicCommunicationWithAndroid.log 所以它既不是空字符串也不是空字符串

        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");    
            }
        }
    
    和onCreate(..)中的main活动 我有:


    我也遇到了同样的问题,解决方法如下:

    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);
    
    PreferenceManager.getDefaultSharedPreferences(getActivity()).getString("user", defaultValue);