首选项未在PreferencesFragment中显示摘要

Squ*_*zer 2 android android-preferences android-fragments

我有一个首选项屏幕(Fragment),它有一些从xml文件设置的首选项.我在其中调用的唯一内容FragmentaddPreferencesFromResource(R.xml.pref_main);onCreate方法.

现在,除了我的首选项中的"摘要"部分之外,一切都运行良好,例如,如果您有一个EditTextPreference并输入了一些文本,那么该文本应该在首选项下以较小的字母显示.

我正在使用自定义控件作为首选项(但它也不适用于任何官方首选项),这扩展了DialogPreference.如果我像这样设置摘要:

@Override
protected void onDialogClosed(boolean positiveResult) {
    if (positiveResult) {
        setSummary("Some summary");
    }
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理,但只要我不离开屏幕,当我返回时它不再存在.有任何想法吗?

hfa*_*ann 5

首选项屏幕不会自动显示摘要数据.你需要在代码中完成它.这是您可以在onCreate()方法中使用的代码片段.在通话后添加addPreferencesFromResource(R.xml.pref_main);

for(int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) {
    initializeSummary(getPreferenceScreen().getPreference(i));
}
Run Code Online (Sandbox Code Playgroud)

initializeSummary()方法是这样的:

private void initializeSummary(Preference p)
{
    if(p instanceof ListPreference) {
        ListPreference listPref = (ListPreference)p;
        p.setSummary(listPref.getEntry());
    }
    if(p instanceof EditTextPreference) {
        EditTextPreference editTextPref = (EditTextPreference)p;
        p.setSummary(editTextPref.getText());
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 要更新每个更改的摘要,请在片段中覆盖它:`@Override public void onSharedPreferenceChanged(SharedPreferences prefs,String key){updatePrefSummary(findPreference(key)); }` (2认同)