问题
我有一个Preference活动,它使用我的XML文件定义的List Preferences。如何将列表活动的摘要设置为所选的值?
谢谢!
#1 热门回答(368 赞)
最简单的方法就是让Android为你完成。假设你希望摘要与所选值匹配,你可以使用XML或Java中的setSummary
方法简单地设置ListPreference
to"%s"
的摘要。例如:
<ListPreference
android:key="pref_list"
android:title="A list of preferences"
android:summary="%s"
android:entries="@array/pref_list_entries"
android:entryValues="@array/pref_list_entries_values"
android:defaultValue="0" />
Android将使用首选的当前字符串值替换%s
,如3111484299的选择器所示。当你输入活动时,也会正确设置列表的摘要 - 你不必编写任何特殊代码来进行初始设置。
在我发现这个之前,我花了很多时间与SharedPreferences
listeners混在一起。
#2 热门回答(28 赞)
你可以使用OnPreferenceChangeListener
动态更改摘要。问题是它获得了选定的值(来自android:entryValues
),而不是标题(android:entries
)。在下面的代码中我使用了toString()
,但正确的解决方案是找到值的标题。无论如何,这个想法是有效的:
public class Preferences extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.your_prefs);
ListPreference listPreference = (ListPreference) findPreference("preference_key");
if(listPreference.getValue()==null) {
// to ensure we don't get a null value
// set first value by default
listPreference.setValueIndex(0);
}
listPreference.setSummary(listPreference.getValue().toString());
listPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary(newValue.toString());
return true;
}
});
}
}
#3 热门回答(17 赞)
我也想实现类似的东西,但问题是https://stackoverflow.com/a/8155029/592025,它显示了我偏好的值(如1,2 3等)。我想显示与所选值对应的条目(人类可读字符串)。
所以我用这种方式改变它并以我需要的方式工作。
listPreference.setSummary(servicePreference.getEntry().toString());
listPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
// Set the value as the new value
listPreference.setValue(newValue.toString());
// Get the entry which corresponds to the current value and set as summary
preference.setSummary(listPreference.getEntry());
return false;
}
});
诀窍是使用2773174277而不是getValue()
,一旦值改变,显式设置值并读回条目。