【问题标题】:onSharedPreferenceChanged not fired all the timeonSharedPreferenceChanged 一直没有触发
【发布时间】:2013-05-23 08:44:20
【问题描述】:

我对这种方法有一个奇怪的问题。它被称为,当我编辑 EditTextPreference 时,仅当我更改值时,并且在 MultiSelectListPreference 上仅在我第一次更改时调用。 这是我的片段代码。

public class PrefFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
        addPreferencesFromResource(R.xml.my_preferences);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        // DO STUFF
    }

    @Override
    public boolean onPreferenceTreeClick(final PreferenceScreen preferenceScreen, final Preference preference) {
        // TODO Auto-generated method stub
        super.onPreferenceTreeClick(preferenceScreen, preference);
        // DO STUFF

    }

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

    @Override
    public void onPause() {
        super.onPause();
        // Unregister the listener whenever a key changes
        getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
    }
}

这是 my_preferences.xml 文件

<PreferenceCategory android:title="Title1" > <EditTextPreference android:dialogMessage="@string/pref_pers_1_msg" android:dialogTitle="@string/pref_pers_1" android:key="@string/pref_pers_1_key" android:title="@string/pref_pers_1" /> <EditTextPreference android:dialogMessage="@string/pref_pers_2_msg" android:dialogTitle="@string/pref_pers_2" android:key="@string/pref_pers_2_key" android:title="@string/pref_pers_2" /> <EditTextPreference android:dialogMessage="@string/pref_pers_3_msg" android:dialogTitle="@string/pref_pers_3" android:key="@string/pref_pers_3_key" android:title="@string/pref_pers_3" /> </PreferenceCategory> <PreferenceCategory android:title="Title2" > <MultiSelectListPreference android:dialogTitle="title_dialog" android:entries="@array/array" android:entryValues="@array/array_elements" android:key="pref_pers_4" android:title="Title2" /> </PreferenceCategory>

【问题讨论】:

  • 找到解决方案了吗?
  • 不...我没有使用 MultiSelectListPreference,而是使用了带有 CheckBoxPreference 的 PreferenceScreen。

标签: android sharedpreferences multiselectlistpreference


【解决方案1】:

unregisterOnSharedPreferenceChangeListeneronPause() 移动到onStop()

【讨论】:

    【解决方案2】:

    可能是因为调用了 onPause() 回调并调用了 unregisterOnSharedPreferenceChangeListener。

    在 onResume() 和 onPause() 方法上都放置日志,以确保当您单击时,取消注册方法没有运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-01
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多