我有一个首选项活动,它使用XML文件定义的列表首选项。如何将列表活动的摘要设置为所选的值?
发布于 2011-11-17 00:23:45
您可以使用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;
}
});
}
}
发布于 2013-04-26 17:55:05
我也想实现类似的东西,但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;
}
});
诀窍是使用getEntry()
而不是getValue()
,一旦更改了值,就显式设置该值并读回条目。
发布于 2018-09-26 00:33:33
我认为您正在寻找的内容非常简单,您可以将以下代码行添加到您的Preference
项目中:
android:summary="%1$s"
所以它看起来像这样:
<ListPreference
android:key="@string/pref_temp_key"
android:title="@string/pref_temp_title"
android:dialogTitle="@string/pref_temp_dialog_title"
android:entries="@array/pref_tempUnit_entries"
android:entryValues="@array/pref_tempUnit_entries"
android:summary="%1$s"
android:defaultValue="@string/pref_temp_default_value" />
https://stackoverflow.com/questions/4823442
复制相似问题