当用户在Android应用上编辑preferences时,我想要让他们在Preference列表可以看到preference当前设置的值
例如:如果我有一个Preference设置成“删除旧信息”,当这个消息被阅读后,指定在多少天后删除消息。在PreferenceActivity中,我比较想要用户看到这样:
“删除旧信息” <- 标题
“x天后删除信息”<-列表中x就是Preference当前的值
这个可以重复使用,这个我就能够简单的把它应用到我所有的preferences中了,而不用管他们的类型(以便它使用最少数量的EditTextPreference,ListPreference等仍然可以工作)
在Preperence列表中,怎么显示出一个AndroidPreference的当前值?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 漫随风起 2012-09-17 03:35关注
很不幸,这看起来并不简单,这样做的自动方法(你应该也注意到了,几乎没有本地的preferences这样做)。那就是说,我确定这是一个相当普通的需求,所以这是我达到这个目的的方法。
关键是要让你的PreferenceActivity类实现OnSharedPreferenceChangeListener方法。使用onSharedPreferenceChanged方法你可以监听到具体的preference关键字,然后在相关的preference上使用setSummary来控制修改文本,像这样:public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(KEY_A_CHECKBOX_PREFERENCE)) { mCheckBoxPreference.setSummary(sharedPreferences.getBoolean(key, false) ? "Disable this setting" : "Enable this setting"); } else if (key.equals(KEY_AN_EDITTEXT_PREFERENCE)) { mEditBoxPreference.setSummary("Current value is " + sharedPreferences.getString(key, "")); } }
在应用程序共享参数上允许这个类作为一个监听者来对preference的改变进行监听使用registerOnSharedPreferenceChangeListener 方法 ,像这样:
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
你的最好的方法就是在onResume上进行登记然后再在onPause中撤销。当你登记这个监听者来确保你获得了正确的初始值得时候,你可能也需要更新文件的值
下边的例子是android示例public class AdvancedPreferences extends PreferenceActivity implements OnSharedPreferenceChangeListener { public static final String KEY_LIST_PREFERENCE= "list_preference"; public static final String KEY_CHECKBOX_PREFERENCE= "checkbox_preference"; private CheckBoxPreference mCheckBoxPreference; private ListPreference mListPreference; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.advanced_preferences); mCheckBoxPreference= (CheckBoxPreference)getPreferenceScreen().findPreference(KEY_ADVANCED_CHECKBOX_PREFERENCE); mListPreference= (ListPreference)getPreferenceScreen().findPreference(KEY_LIST_PREFERENCE); } @Override protected void onResume() { super.onResume(); mCheckBoxPreference.setSummary(sharedPreferences.getBoolean(key, false) ? "Disable this setting" : "Enable this setting"); mListPreference.setSummary("Current value is " + sharedPreferences.getValue(key, "")); getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } @Override protected void onPause() { super.onPause(); getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); } public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.equals(KEY_CHECKBOX_PREFERENCE)) { mCheckBoxPreference.setSummary(sharedPreferences.getBoolean(key, false) ? "Disable this setting" : "Enable this setting"); } else if (key.equals(KEY_LIST_PREFERENCE)) { mListPreference.setSummary("Current value is " + sharedPreferences.getValue(key, "")); } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报