Как получить Android ListPreference, определенный в Xml, значения которого являются целыми числами? - PullRequest
18 голосов
/ 24 апреля 2010

Можно ли определить 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 ]

40 голосов
/ 13 июня 2010

Насколько я понимаю, ListPreference может работать только со строковыми массивами. Вам придется использовать getString () и конвертировать в целое число самостоятельно. Смотрите http://code.google.com/p/android/issues/detail?id=2096 для сообщения об ошибке на этом. Похоже, Google не планирует расширять ListPreference для обработки чего-либо, кроме строк.

Кроме того: Вам также нужно сохранить предпочтения в виде строки. В противном случае ваша активность в настройках завершится с ошибкой при попытке прочитать строковое значение.

6 голосов
/ 28 сентября 2011

Я сделал это немного более экстремально.

Я использовал ListPreference и сделал мой массив entryValues ​​содержащим строки, которые я могу преобразовать в целое с помощью Integer.parseInt ().

Затем в своей PreferencesActivity я установил OnPreferenceChangeListener для этого предпочтения, а в методе onPreferenceChange () я установил другое предпочтение для целочисленной версии - именно этот второй я на самом деле использую в своем коде. Первый - только для пользовательской опции.

Таким образом, мне не нужно конвертировать строку в int каждый раз, когда мне нужно посмотреть на нее, я просто делаю это, когда пользователь устанавливает ее. Возможно, излишне, но это работает :) 1007 *

2 голосов
/ 17 мая 2012

На самом деле, как вы можете прочитать в документах:

http://developer.android.com/reference/android/preference/ListPreference.html#getValue()

Метод для получения значения ListPreference:

public String getValue ()

Итак, вы получите строку. Это не имеет большого значения, но может быть красивее допустить целые числа.

0 голосов
/ 11 августа 2016

Но для меня вы сначала получаете строковый тип: String numStr = prefs.getString ("key", "-555"); затем: `

try {
    int yourInt =  Integer.parseInt(numStr);
    if(yourInt != -555)
    {
        //do your stuff
    }
}
catch(Exception e)
{
    ...
}

`

0 голосов
/ 04 мая 2012

Вам необходимо создать ресурс XML и установить для него значение по умолчанию.Все, что вы вводите в XML-файл как литерал, обрабатывается как строка, поэтому ListPreference будет выдавать исключение нулевого указателя при попытке найти строку в целочисленном массиве.

...