Как получить 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)
{
    ...
}

`