我最近将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()从未调用过所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)