猿问

如何在“首选项”摘要中显示Android首选项的当前值?

如何在“首选项”摘要中显示Android首选项的当前值?

这必须经常出现。

当用户在Android应用中编辑首选项时,我希望他们能够在Preference摘要中查看首选项的当前设置值。

示例:如果我有“丢弃旧邮件”的“首选项”设置,该设置指定需要清除邮件的天数。在PreferenceActivity我想让用户看到:

“丢弃旧邮件” < - 标题

“ x天后清理消息” < - summary其中x是当前的Preference值

额外的功劳:使这个可重用,所以我可以轻松地将它应用到我的所有首选项,无论其类型如何(这样它可以使用EditTextPreference,ListPreference等,只需最少的编码)。


饮歌长啸
浏览 554回答 3
3回答

芜湖不芜

如果符合您的需求,有很多方法可以使这个解决方案成为更通用的解决方案。例如,如果您希望通常将所有列表首选项显示为摘要,则可以将其用于onSharedPreferenceChanged实现:public&nbsp;void&nbsp;onSharedPreferenceChanged(SharedPreferences&nbsp;sharedPreferences,&nbsp;String&nbsp;key)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Preference&nbsp;pref&nbsp;=&nbsp;findPreference(key); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(pref&nbsp;instanceof&nbsp;ListPreference)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ListPreference&nbsp;listPref&nbsp;=&nbsp;(ListPreference)&nbsp;pref; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pref.setSummary(listPref.getEntry()); &nbsp;&nbsp;&nbsp;&nbsp;}}这很容易扩展到其他偏好类。并通过getPreferenceCount与getPreference在功能PreferenceScreen和PreferenceCategory,你可以很容易地编写一个通用函数走偏好树设置类型的所有喜好的你渴望自己的概要toString表示

Qyouu

这是我的解决方案...... FWIWpackage&nbsp;com.example.PrefTest;import&nbsp;android.content.SharedPreferences;import&nbsp;android.content.SharedPreferences.OnSharedPreferenceChangeListener;import&nbsp;android.os.Bundle;import&nbsp;android.preference.EditTextPreference;import&nbsp;android.preference.ListPreference;import&nbsp;android.preference.Preference;import&nbsp;android.preference.PreferenceActivity;import&nbsp;android.preference.PreferenceGroup;import&nbsp;android.preference.PreferenceManager;public&nbsp;class&nbsp;Preferences&nbsp;extends&nbsp;PreferenceActivity&nbsp;implements &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OnSharedPreferenceChangeListener&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;onCreate(Bundle&nbsp;savedInstanceState)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.onCreate(savedInstanceState); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addPreferencesFromResource(R.xml.preferences); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreferenceManager.setDefaultValues(Preferences.this,&nbsp;R.xml.preferences, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;false); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initSummary(getPreferenceScreen()); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;onResume()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.onResume(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Set&nbsp;up&nbsp;a&nbsp;listener&nbsp;whenever&nbsp;a&nbsp;key&nbsp;changes &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getPreferenceScreen().getSharedPreferences() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.registerOnSharedPreferenceChangeListener(this); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;onPause()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.onPause(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Unregister&nbsp;the&nbsp;listener&nbsp;whenever&nbsp;a&nbsp;key&nbsp;changes &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getPreferenceScreen().getSharedPreferences() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.unregisterOnSharedPreferenceChangeListener(this); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onSharedPreferenceChanged(SharedPreferences&nbsp;sharedPreferences, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;key)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updatePrefSummary(findPreference(key)); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;initSummary(Preference&nbsp;p)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(p&nbsp;instanceof&nbsp;PreferenceGroup)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreferenceGroup&nbsp;pGrp&nbsp;=&nbsp;(PreferenceGroup)&nbsp;p; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;pGrp.getPreferenceCount();&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initSummary(pGrp.getPreference(i)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updatePrefSummary(p); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;updatePrefSummary(Preference&nbsp;p)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(p&nbsp;instanceof&nbsp;ListPreference)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ListPreference&nbsp;listPref&nbsp;=&nbsp;(ListPreference)&nbsp;p; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.setSummary(listPref.getEntry()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(p&nbsp;instanceof&nbsp;EditTextPreference)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EditTextPreference&nbsp;editTextPref&nbsp;=&nbsp;(EditTextPreference)&nbsp;p; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(p.getTitle().toString().toLowerCase().contains("password")) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.setSummary("******"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.setSummary(editTextPref.getText()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(p&nbsp;instanceof&nbsp;MultiSelectListPreference)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EditTextPreference&nbsp;editTextPref&nbsp;=&nbsp;(EditTextPreference)&nbsp;p; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.setSummary(editTextPref.getText()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}}

烙印99

Android&nbsp;文档说可以在以下位置使用String格式标记getSummary():如果摘要中包含字符串格式标记(即“%s”或“%1 $ s”),则当前条目值将替换为其位置。只需android:summary="Clean up messages after %s days"在ListPreference中指定xml声明就适合我。注意:这仅适用于ListPreference。
随时随地看视频慕课网APP

相关分类

Android
我要回答