当我在用户选择偏好项目时尝试设置摘要时,通常会保存。但是当我的应用程序重新启动时,摘要就消失了。
以下是我的代码,用于设置ListPreference
和EditTextPreference
的摘要:
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key){
Preference pref = findPreference(key);
// I feel the problem is happened here
if (pref instanceof ListPreference) {
ListPreference listPref = (ListPreference) pref;
pref.setSummary(listPref.getEntry());
}
// Same problem here
if (pref instanceof EditTextPreference) {
EditTextPreference editText = (EditTextPreference) pref;
pref.setSummary(editText.getEntry().toString());
}
}
有什么不对吗?
答案 0 :(得分:26)
如果您只想显示当前条目,请尝试在xml中设置摘要:
android:summary="%s"
这仅适用于ListPreference
(请参阅Doc):
如果摘要中包含字符串格式标记(即"%s"或"%1 $ s"),则当前条目值将替换为其位置。
答案 1 :(得分:6)
问题可能是启动时未调用the listener(值未更改)。但您可以在XML中动态设置摘要。对于ListPreference
,这是内置的,@FreshD's answer是可行的方法。扩展到f.ex.一个EditTextPreference
,你需要创建自己的类。 For example
package your.package; import android.content.Context; import android.util.AttributeSet; public class EditTextPreference extends android.preference.EditTextPreference{ public EditTextPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public EditTextPreference(Context context, AttributeSet attrs) { super(context, attrs); } public EditTextPreference(Context context) { super(context); } @Override public CharSequence getSummary() { String summary = super.getSummary().toString(); return String.format(summary, getText()); } }
并在xml中使用它:
<your.package.EditTextPreference android:key="pref_alpha" android:summary="Actual value: %s" android:title="Title" android:defaultValue="default" />
答案 2 :(得分:2)
ListPreference listPref = (ListPreference) findPreference("listkey");
listPref.setSummary(listPref.getEntry());
EditTextPreference editText = (EditTextPreference) findPreference("edittextkey");
editText.setSummary(editText.getEntry().toString());
如果您有密钥,那么在您的preferenceFragment或Activity
中的addpreferences之后的oncreate中设置如上所述的摘要答案 3 :(得分:0)
我非常努力地使摘要具有动态性。不完全确定这是否回答了问题,但想在某个地方发布,因此,如果有人搜索,他们不必像我一样努力。
这是简单的解决方案useSimpleSummaryProvider="true"