2011-08-31 76 views
4

获取值当前所选项目的ListPreference很简单:获取ListPreference选项的关键字(不是值) - 可能吗?

String selected = sharedPrefs.getString(
    getString(R.string.list_preference_array), 
    "default string" 
); 

但现在我需要获得当前所选项目的关键,来代替。这可能吗?

为了澄清,XML文件中的一个典型ListPreference定义具有以下组件:

<ListPreference 
    android:key="@string/list_preference_array" 
    android:title="Title of ENTIRE list (not seen by user?)" 
    android:summary="this is what the user sees in small fonts" 
    android:defaultValue="just in case" 
    android:entries="@array/user_friendly_labels" 
    android:entryValues="@array/code_meaningful_strings" 
    android:dialogTitle="User Prompt(big font)" 
    android:showDefault="true" 
    android:showSilent="true" 
/> 

什么sharedPrefs.getString()回报是从Android的当前选择:entryValues。我感兴趣的是从android:条目目前的选择。我错误地称它为“关键”,但它确实是一个“相应的标签”,它必须与实际内容不同。

+0

没有的GetString(R.string.select_string)的你的关键'收到? – Erik

+0

@Erik'getString(R.string.select_string)'是整个ListPreference数组的关键字(“名称”),而不是选择。 – uTubeFan

+0

@uTubeFan,如果你使用的是ListPreference,没有关键的选定项目,只有一个条目... –

回答

14

猜测的一点:

int index = mylistpreference.findIndexOfValue(selected) // <- selected taken from your code above 
String entry = mylistpreference.getEntries()[index]; 
0

功能是作为defined

SharedPreferences.getString(String key, String defaultValue); 

因此,在你的示例代码,getString(R.string.select_string)将返回键。

当您添加SharedPreference时,您需要指定密钥,因此该密钥与您用于设置该值的密钥相同。

编辑:

使用SharedPreferences.getString()与ListPreference键的键将返回值从列表中选择用户。您不需要为ListPreference数组中的每个选项创建键,并且这些键不会自动创建。使用与ListPreference的entryValues相关的用例语句。

+0

查看我的回复@ Erik的评论。 – uTubeFan

+0

@uTubeFan,编辑我的答案。 –

1

只需使用:

mylistpreference.getEntry() 

获得mylistpreference使用:

mylistpreference= (ListPreference) getPreferenceScreen().findPreference(key); 

关键是android:关键你的偏好定义。 xml里面< ListPreference>标签。

0

@shai你的方法滞后,以最后一次选择的条目

listPreference.getEntry() 

而是@Erik的方法很好地工作

int index = listPreference.findIndexOfValue((String) value) 
String entry = listpreference.getEntries()[index]; 
+0

它很好。你节省了我的时间,谢谢 –

相关问题