设置摘要以描述当前值

时间:2014-09-30 07:25:08

标签: android sharedpreferences

当我在用户选择偏好项目时尝试设置摘要时,通常会保存。但是当我的应用程序重新启动时,摘要就消失了。

以下是我的代码,用于设置ListPreferenceEditTextPreference的摘要:

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());
    }
}

有什么不对吗?

4 个答案:

答案 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"