Как получить 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 и проанализировать результат.
5 ответов
Я понимаю, что ListPreference может работать только со строковыми массивами. Вам придется использовать getString () и преобразовать в integer самостоятельно. См.http://code.google.com/p/android/issues/detail?id=2096 для отчета об ошибке на этом. Похоже, Google не планирует расширять ListPreference для обработки чего-либо, кроме строк.
Также: вам также нужно сохранить предпочтение в виде строки. В противном случае ваша активность предпочтений завершится сбоем при запуске и попытке чтобы прочитать строковое значение.
Я сделал это немного более экстремальным способом.
Я использовал ListPreference и сделал мой массив entryValues содержать строки, которые я могу преобразовать в целое число с Integer.parseInt().
затем в моей PreferencesActivity я устанавливаю OnPreferenceChangeListener для этого предпочтения, и в методе onPreferenceChange() я устанавливаю другое предпочтение целочисленной версии - это второе, которое я фактически использую в своем коде. Первый существует только для пользователя выбор.
таким образом, мне не нужно преобразовывать строку в int каждый раз, когда мне нужно посмотреть на нее, я просто делаю это, когда пользователь устанавливает ее. Возможно, излишне, но это работает:)
в самом деле, как вы можете прочитать в документации:
http://developer.android.com/reference/android/preference/ListPreference.html#getValue()
метод, чтобы получить ListPreference
значение:
public String getValue ()
Итак, вы получаете строку. Это не имеет большого значения, но может быть красивее, чтобы признать целые числа.
вам нужно создать xml-ресурс и установить для него значение по умолчанию. Все, что вы вводите в XML-файл в качестве литерала, рассматривается как строка, поэтому - ой строке выдаст исключение нулевого указателя, когда он попытается найти строку в целочисленном массиве.
но для меня, вы сначала получаете тип строка: Строка numStr = prefs.getString ("ключ", " -555"); затем: `
try {
int yourInt = Integer.parseInt(numStr);
if(yourInt != -555)
{
//do your stuff
}
}
catch(Exception e)
{
...
}
`