设置摘要以描述当前值

Ang*_*i H 3 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());
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么不对?

Fre*_*shD 26

如果您只想显示当前条目,请尝试在xml中设置摘要:

android:summary="%s"
Run Code Online (Sandbox Code Playgroud)

这仅适用于ListPreference(参见Doc):

如果摘要中包含字符串格式标记(即"%s"或"%1 $ s"),则当前条目值将替换为其位置.

  • 无法使此功能适用于EditTextPreference. (4认同)

ser*_*inc 7

问题可能是启动时未调用侦听器(值未更改).但您可以在XML中动态设置摘要.对于a ListPreference,这是内置的,@ FreshD的答案是要走的路.扩展到f.ex. a EditTextPreference,你需要创建自己的类.例如

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());
        }
    }
Run Code Online (Sandbox Code Playgroud)

并在你的xml中使用它:

<your.package.EditTextPreference
                android:key="pref_alpha"
                android:summary="Actual value: %s"
                android:title="Title"
                android:defaultValue="default"
                />
Run Code Online (Sandbox Code Playgroud)


nan*_*esh 3

 ListPreference listPref = (ListPreference) findPreference("listkey");
 listPref.setSummary(listPref.getEntry());

 EditTextPreference editText = (EditTextPreference) findPreference("edittextkey");
 editText.setSummary(editText.getEntry().toString());
Run Code Online (Sandbox Code Playgroud)

如果您有密钥,请像上面一样设置摘要,在您的preferenceFragment或Activity中的addpreferences之后的oncreate中