如何在“首选项”摘要中显示Android首选项的当前值?这必须经常出现。当用户在Android应用中编辑首选项时,我希望他们能够在Preference摘要中查看首选项的当前设置值。示例:如果我有“丢弃旧邮件”的“首选项”设置,该设置指定需要清除邮件的天数。在PreferenceActivity我想让用户看到:“丢弃旧邮件” < - 标题“ x天后清理消息” < - summary其中x是当前的Preference值额外的功劳:使这个可重用,所以我可以轻松地将它应用到我的所有首选项,无论其类型如何(这样它可以使用EditTextPreference,ListPreference等,只需最少的编码)。
3 回答
![?](http://img1.sycdn.imooc.com/54584c5e0001491102200220-100-100.jpg)
芜湖不芜
TA贡献1796条经验 获得超7个赞
如果符合您的需求,有很多方法可以使这个解决方案成为更通用的解决方案。
例如,如果您希望通常将所有列表首选项显示为摘要,则可以将其用于onSharedPreferenceChanged
实现:
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { Preference pref = findPreference(key); if (pref instanceof ListPreference) { ListPreference listPref = (ListPreference) pref; pref.setSummary(listPref.getEntry()); }}
这很容易扩展到其他偏好类。
并通过getPreferenceCount
与getPreference
在功能PreferenceScreen
和PreferenceCategory
,你可以很容易地编写一个通用函数走偏好树设置类型的所有喜好的你渴望自己的概要toString
表示
![?](http://img1.sycdn.imooc.com/545868190001d52602200220-100-100.jpg)
Qyouu
TA贡献1786条经验 获得超11个赞
这是我的解决方案...... FWIW
package com.example.PrefTest;import android.content.SharedPreferences;import android.content.SharedPreferences.OnSharedPreferenceChangeListener;import android.os.Bundle;import android.preference.EditTextPreference;import android.preference.ListPreference;import android.preference.Preference;import android.preference.PreferenceActivity;import android.preference.PreferenceGroup;import android.preference.PreferenceManager;public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); PreferenceManager.setDefaultValues(Preferences.this, R.xml.preferences, false); initSummary(getPreferenceScreen()); } @Override protected void onResume() { super.onResume(); // Set up a listener whenever a key changes getPreferenceScreen().getSharedPreferences() .registerOnSharedPreferenceChangeListener(this); } @Override protected void onPause() { super.onPause(); // Unregister the listener whenever a key changes getPreferenceScreen().getSharedPreferences() .unregisterOnSharedPreferenceChangeListener(this); } public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { updatePrefSummary(findPreference(key)); } private void initSummary(Preference p) { if (p instanceof PreferenceGroup) { PreferenceGroup pGrp = (PreferenceGroup) p; for (int i = 0; i < pGrp.getPreferenceCount(); i++) { initSummary(pGrp.getPreference(i)); } } else { updatePrefSummary(p); } } private void updatePrefSummary(Preference p) { if (p instanceof ListPreference) { ListPreference listPref = (ListPreference) p; p.setSummary(listPref.getEntry()); } if (p instanceof EditTextPreference) { EditTextPreference editTextPref = (EditTextPreference) p; if (p.getTitle().toString().toLowerCase().contains("password")) { p.setSummary("******"); } else { p.setSummary(editTextPref.getText()); } } if (p instanceof MultiSelectListPreference) { EditTextPreference editTextPref = (EditTextPreference) p; p.setSummary(editTextPref.getText()); } }}
- 3 回答
- 0 关注
- 553 浏览
添加回答
举报
0/150
提交
取消