首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android列表首选项:是否将摘要作为选定值?

Android列表首选项:是否将摘要作为选定值?
EN

Stack Overflow用户
提问于 2011-01-28 08:12:06
回答 10查看 43.7K关注 0票数 120

我有一个首选项活动,它使用XML文件定义的列表首选项。如何将列表活动的摘要设置为所选的值?

EN

回答 10

Stack Overflow用户

发布于 2011-11-17 00:23:45

您可以使用OnPreferenceChangeListener动态更改摘要。问题是它获取的是选定的值(来自android:entryValues),而不是标题(android:entries)。在下面的代码中,我使用了toString(),但正确的解决方案是查找该值的标题。无论如何,这个想法是可行的:

代码语言:javascript
复制
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;
            }
        });
    }
}
票数 28
EN

Stack Overflow用户

发布于 2013-04-26 17:55:05

我也想实现类似的东西,但https://stackoverflow.com/a/8155029/592025的问题是,它显示了我的偏好的值(如1,2,3等)。我想显示与所选值对应的条目(人类可读的字符串)。

所以我以这种方式改变了它,并以我需要的方式工作。

代码语言:javascript
复制
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(),一旦更改了值,就显式设置该值并读回条目。

票数 17
EN

Stack Overflow用户

发布于 2018-09-26 00:33:33

我认为您正在寻找的内容非常简单,您可以将以下代码行添加到您的Preference项目中:

代码语言:javascript
复制
android:summary="%1$s"

所以它看起来像这样:

代码语言:javascript
复制
<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" />
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4823442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档