Как получить Android ListPreference, определенный в Xml, значения которого являются целыми числами?
Можно ли определить ListPreference в Xml и получить значение из SharedPreferences с помощью getInt? Вот мой Xml:
<ListPreference android:key="@string/prefGestureAccuracyKey"
android:title="@string/prefGestureAccuracyTitle" android:summary="@string/prefGestureAccuracyDesc"
android:entries="@array/prefNumberAccuracyLabels" android:entryValues="@array/prefNumberAccuracyValues"
android:dialogTitle="@string/prefGestureAccuracyDialog"
android:persistent="true" android:defaultValue="2"
android:shouldDisableView="false" />
И я хочу получить значение с чем-то вроде: int val = sharedPrefs.getInt(key, defaultValue).
На данный момент мне нужно использовать getString и проанализировать результат.
Ответы
Ответ 1
Я понимаю, что ListPreference может работать только со строковыми массивами. Вам нужно будет использовать getString() и преобразовать в integer самостоятельно. См. http://code.google.com/p/android/issues/detail?id=2096 для отчета об ошибке. Не похоже, что Google планирует расширить ListPreference для обработки любых строк, кроме строк.
Также: вам нужно сохранить предпочтение как строку. В противном случае ваша активность будет сбой при запуске и попытается прочитать строковое значение.
Ответ 2
Я сделал это немного более экстремально.
Я использовал ListPreference и сделал свой массив entryValues содержащими строки, которые я могу преобразовать в integer с Integer.parseInt().
Затем в моей настройке PreferencesActivity я настраиваю OnPreferenceChangeListener для этого предпочтения, а в методе onPreferenceChange() я устанавливаю другое предпочтение целочисленной версии - это вторая, которую я фактически использую в своем коде. Первый - это только для пользовательской опции.
Таким образом, мне не нужно преобразовывать String в int каждый раз, когда мне нужно посмотреть на него, я просто делаю это, когда пользователь устанавливает его. Возможно, перебор, но он работает:)
Ответ 3
Фактически, как вы можете прочитать в документах:
http://developer.android.com/reference/android/preference/ListPreference.html#getValue()
Метод получения значения ListPreference
:
public String getValue ()
Итак, вы получаете строку. Это не большое дело, но может быть красивее, чтобы допускать целые числа.
Ответ 4
Вам нужно создать ресурс xml и установить для него значение по умолчанию. Все, что вы вводите в XML файл в качестве литерала, рассматривается как строка, поэтому ListPreference будет вызывать исключение нулевого указателя при попытке найти строку в целочисленном массиве.
Ответ 5
Но для меня сначала вы получите тип строки:
String numStr = prefs.getString( "ключ", "-555" );
тогда:
`
try {
int yourInt = Integer.parseInt(numStr);
if(yourInt != -555)
{
//do your stuff
}
}
catch(Exception e)
{
...
}
`