开发者

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

Is it possible to define a ListPreference in Xml and retrieve the value from SharedPreferences using getInt? Here is my 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" />

And I want to get the value with something like: int val = sharedPrefs.getInt(key, defaultValue).

At the moment 开发者_Go百科I have to use getString and parse the result.


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 :)


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.


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)
{
    ...
}

`

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜