How to get an Android ListPreference defined in Xml whose values are integers?

陌路散爱 提交于 2019-12-03 10:03:18

My understanding is that ListPreference can only work with string arrays. You'll have to use getString() and convert to integer yourself. See http://code.google.com/p/android/issues/detail?id=2096 for the bug report on this. It doesn't look like Google plans to extend ListPreference to handle anything but strings.

Also: You'll need to store the preference as a string too. Otherwise, your preferences activity will crash when it starts up and tries to read a string value.

I did this in a little more extreme way.

I used the ListPreference and made my entryValues array contain Strings that I can convert to integer with Integer.parseInt().

Then in my PreferencesActivity, I setup a OnPreferenceChangeListener for this preference, and in the onPreferenceChange() method I set a different preference to the integer version - this second one is the one I actually use in my code. The first is there just for the user option.

This way I don't have to convert a String to int each time I need to look at it, I just do it when the user sets it. Perhaps overkill, but it does work :)

viridis

In fact as you can read in the docs:

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

The method to get a ListPreference value is:

public String getValue ()

So you get a String. It's not a big deal, but could be prettier to admit integers.

Dewey

You need to create an xml resource and set your default value to that. Anything you enter in the XML file as a literal is treated as a string, so the ListPreference will throw a null pointer exception when it tries to find a string in an integer array.

But for me, you first get a string type by: String numStr = prefs.getString("key", "-555"); then: `

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

`

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!