安卓列表首选项:将摘要作为所选值?
我有一个首选项活动,它使用由我的 XML 文件定义的列表首选项。如何将列表活动的摘要设置为所选值?
我有一个首选项活动,它使用由我的 XML 文件定义的列表首选项。如何将列表活动的摘要设置为所选值?
最简单的方法是让Android为您完成。假设您希望摘要与所选值匹配,则只需使用 XML 或 Java 中的方法将 ListPreference
的摘要设置为“%s”。
例如:setSummary
<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
ListPreference
这也适用于 AndroidX 。ListPreference
在我发现这一点之前,我花了太多时间与听众混在一起。SharedPreferences
您可以使用 来动态更改摘要。问题是它获取选定的值(来自 ),而不是标题()。在下面的代码中,我使用了 ,但正确的解决方案是找到值的标题。无论如何,这个想法是有效的: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;
}
});
}
}