Если вы хотите вызвать getValue()
после вызова setDefaultValue()
, чтобы получить значение по умолчанию при первом открытии PreferenceActivity, вам необходимо переопределить onSetInitialValue()
в своем подклассе Preference.В противном случае значение по умолчанию не будет установлено при вызове getValue()
и вернет null
(как вы уже видели).
Например, если значением по умолчанию является целое число, ваш onSetInitialValue()
может выглядеть следующим образом:
@Override
protected void onSetInitialValue(boolean restore, Object defaultValue)
{
setValue(restore ? getPersistedInt(DEFAULT_VALUE) : (Integer) defaultValue);
}
DEFAULT_VALUE
- это просто частная константа внутри предпочтения, которая будет использоваться вв случае, если сохраненный int не может быть получен.setValue()
является общедоступным установщиком, дополняющим ваш getValue()
общедоступный метод получения, и должен выглядеть примерно так:
public int getValue()
{
return mValue;
}
public void setValue(int value)
{
if (value != mValue)
{
mValue = value;
persistInt(value);
}
}
Для получения дополнительной информации о onSetInitialValue()
см. Документацию API здесь .
Также неплохо бы взглянуть на исходный код класса Preference ( здесь ), чтобы понять, почему необходимо реализовать onSetInitialValue()
.В частности, посмотрите на setDefaultValue()
, а затем посмотрите на dispatchSetInitialValue()
.