android–onSharedPreferenceChanged()从未调用过

android–onSharedPreferenceChanged()从未调用过,第1张

概述我最近将GitHub中的HoloEverywhere库导入了Eclpse,并开始在已经运行的应用程序中使用它.总的来说,我对图书馆很满意,事情进展顺利.我正在尝试使用org.holoeverywhere.preference.PreferenceActivity代替旧的PreferenceActivity.UI看起来应该如此,但我注意到onSharedPreferenceCha

我最近将GitHub中的HoloEverywhere库导入了Eclpse,并开始在已经运行的应用程序中使用它.总的来说,我对图书馆很满意,事情进展顺利.@H_404_1@

我正在尝试使用org.holoeverywhere.preference.PreferenceActivity代替旧的PreferenceActivity. UI看起来应该如此,但我注意到onSharedPreferenceChanged()永远不再被调用.我究竟做错了什么?@H_404_1@

AFAIK我按预期使用该库.我使用HoloEverywhere几乎没有改变从旧版本到新版本的任何内容.虽然有很多关于SO的相关问题,但我找不到能解决我问题的任何问题.@H_404_1@

相关代码发布如下:@H_404_1@

@H_404_1@

import org.holoeverywhere.LayoutInflater;import org.holoeverywhere.preference.Preference;import org.holoeverywhere.preference.PreferenceFragment;import org.holoeverywhere.preference.PreferenceManager;import org.holoeverywhere.preference.PreferenceScreen;import org.holoeverywhere.preference.SharedPreferences;import org.holoeverywhere.preference.SharedPreferences.Editor;import org.holoeverywhere.preference.SharedPreferences.OnSharedPreferencechangelistener;public class SettingsActivity extends org.holoeverywhere.preference.PreferenceActivity implements SyncManager.SyncProgressListener, SharedPreferences.OnSharedPreferencechangelistener{private static SharedPreferences prefs;@OverrIDepublic voID onCreate(Bundle savedInstanceState)    {    prefs = PreferenceManager.getDefaultSharedPreferences( this );    }public voID onSharedPreferenceChanged(SharedPreferences prefs, String key)    {    // do some really important stuff here    }public static class displaySetttingsFragment extends PreferenceFragment    {    @OverrIDe    public voID onCreate(Bundle savedInstanceState)        {        super.onCreate( savedInstanceState );        getActivity().setTitle( getString( R.string.pref_display_Title ) );        addPreferencesFromresource( R.xml.display_preferences );        }    @OverrIDe    public voID onResume()        {        super.onResume();        prefs.registerOnSharedPreferencechangelistener( (SettingsActivity) getActivity() );        }    @OverrIDe    public voID onPause()        {        super.onPause();        prefs.unregisterOnSharedPreferencechangelistener( (SettingsActivity) getActivity() );        }    }}

更新:我改变并提交首选项的示例,我希望调用onSharedPreferenceChanged()@H_404_1@

@H_404_1@

    @OverrIDe    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference)        {        String resetString = getString( R.string.pref_key_reset_display );        String key = preference.getKey();        if ( key != null && key.equals( resetString ) )            {            prefs.edit().                putBoolean( getString( R.string.pref_key_reset_display ), true ).commit();            }        return super.onPreferenceTreeClick( preferenceScreen, preference );        }

更新:我不相信这是我的首选项在commit()或apply()时没有注册监听器(在本例中为我的SettingsActivity)的问题.我能够调试并看到监听器内部prefs中的WeakHashMap始终将我的活动作为成员.我已经尝试创建一个监听器的全局变量,但它没有任何区别.@H_404_1@

解决方法:@H_404_1@

可能缺少以下调用:这可能会解决您的问题.@H_404_1@

@H_404_1@

@OverrIDeprotected voID onResume() {    // Todo auto-generated method stub    super.onResume();    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferencechangelistener(this);}/* (non-Javadoc) * @see androID.app.Activity#onPause() */@OverrIDeprotected voID onPause() {    // Todo auto-generated method stub    super.onPause();    getPreferenceScreen().getSharedPreferences()    .unregisterOnSharedPreferencechangelistener(this);}
总结

以上是内存溢出为你收集整理的android – onSharedPreferenceChanged()从未调用过全部内容,希望文章能够帮你解决android – onSharedPreferenceChanged()从未调用过所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1114658.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存