Подтвердить что ты не робот

Как получить 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 и проанализировать результат.

4b9b3361

Ответ 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)
{
    ...
}

`