Reputation: 5203
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 I have to use getString and parse the result.
Upvotes: 18
Views: 22536
Reputation: 1
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)
{
...
}
`
Upvotes: 0
Reputation: 10143
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.
Upvotes: 40
Reputation: 177
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.
Upvotes: 2
Reputation: 1
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.
Upvotes: 0
Reputation: 836
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 :)
Upvotes: 6