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