Geo*_*ard 394
最简单的方法就是让Android为您完成.假设您希望摘要与所选值匹配,您可以使用XML或Java中的方法简单地设置ListPreferenceto 的摘要"%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" />
Run Code Online (Sandbox Code Playgroud)
Android将替换%s为首选项的当前字符串值,如ListPreference选择器所显示的那样.当您输入活动时,也会正确设置列表的摘要 - 您不必编写任何特殊代码来进行初始设置.
我花了远太多时间摆弄ListPreference听众,我发现在这之前.
Axe*_*xel 28
您可以使用OnPreferenceChangeListener动态更改摘要.问题是它获取选定的值(from android:entryValues),而不是caption(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;
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
mid*_*nhk 18
我也希望实现类似的功能,但/sf/answers/570852061/的问题在于,它显示了我的偏好值(如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;
}
});
Run Code Online (Sandbox Code Playgroud)
诀窍是使用getEntry()而不是,getValue()一旦值改变,显式设置值并读回条目.
Nat*_*ein 11
如此简单 - 只需将以下属性添加到您的 XML 定义中 -
<ListPreference
...
app:useSimpleSummaryProvider="true"
...
/>
Run Code Online (Sandbox Code Playgroud)
我认为您要查找的内容非常简单,可以在Preference项目中添加以下代码行:
android:summary="%1$s"
Run Code Online (Sandbox Code Playgroud)
因此它将看起来像这样:
<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" />
Run Code Online (Sandbox Code Playgroud)
首先在 onCreate 中获取对 ListPreference 的引用。您可以使用 findPreference()。例如:
ListPreference pref = (ListPreference) findPreference("thePreferencesKey");
Run Code Online (Sandbox Code Playgroud)
然后,当您首次加载 Activity 时以及每当首选项值发生更改时,请使用您想要获取 ListPreference 的值的任何方法并使用以下命令设置摘要:
pref.setSummary(theNewString);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38228 次 |
| 最近记录: |