【问题标题】:MultiSelectListPreference onSharedPreferenceChanged not called after first time第一次后未调用 MultiSelectListPreference onSharedPreferenceChanged
【发布时间】:2014-04-18 18:44:51
【问题描述】:

我的首选项文件中有一个 MultiSelectListPreference:

<PreferenceCategory android:title="TYPES" >
    <MultiSelectListPreference
        android:defaultValue="@array/empty_array"
        android:entries="@array/types"
        android:entryValues="@array/typeValues"
        android:key="types"
        android:title="Types" />
</PreferenceCategory>

然后在代码中:

public class PublicPreferencesActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {

    PublicPreferenceFragment preference = new PublicPreferenceFragment();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(android.R.id.content, preference).commit();
    }

   public class PublicPreferenceFragment extends PreferenceFragment {
        @Override
        public void onCreate(final Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.publicpreferences);

            for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) {
                initSummary(getPreferenceScreen().getPreference(i));
            }
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        // Set up a listener whenever a key changes
        preference.getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        preference.getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        // do something
        // this does not get called all the time for MultiSelectListPreference
    }
}

我四处搜索,似乎其他人也遇到了这个问题,但没有提供解决方法。

我在这里看到了一条评论,说直到 API 18 的 SDK 中可能存在错误,但无法在任何地方确认,并且再次没有解决方法。 Android MultiSelectListPreference uncheck does not fire SharedPreferenceChanged

所以这是一个错误吗?有解决办法吗?

似乎是一个相当大的错误,所以我觉得我做错了什么导致了这个。

【问题讨论】:

    标签: android settings sharedpreferences


    【解决方案1】:

    我正在处理同样的问题。从 SDK 18 开始,一切似乎都可以正常工作,但在休息时,我遇到了和你一样的问题。

    我找到了一个似乎对我有用的解决方案:

    MultiSelectListPreference multiSelectListPref = (MultiSelectListPreference) findPreference("pref_name");
    if (multiSelectListPref != null) {
        multiSelectListPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                MultiSelectListPreference mpreference = (MultiSelectListPreference) preference;
                mpreference.setSummary(newValue.toString());
                mpreference.setValues((Set<String>) newValue);
                return false;
            }
        });
    }
    

    也许它对你的情况也有用

    【讨论】:

    猜你喜欢
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    相关资源
    最近更新 更多