本人在开发的过程中使用Preference遇到了一些问题,然后解决了一些问题,把这个过程记录下来,和大家一起分享。
在android给的例子里面,给preference注册事件是使用getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener();这个函数来实现的,这是因为我们创建preference的时候呢,默认是sharedPreference, 这个sharedPreference的好处就是你的改动会写到文件,这样呢你就不用实现文件的操作部分,这也很符合设置的概念。但是呢,我们有时候不需要值保存起来,比如有种情况,我们的值是重服务器取回来的。
这样设置默认值的时候我们就无法设置了,用过的人就会发现,
.setDefaultValue(); 这个函数失效了
看过源代码就知道,default value这个值是从文件里取出来的。
而我们不需要保存这个值,我们的值是服务器取回来的,那么怎么办呢,把这个preference设置为非永久就好了
.setPersistent(false); 加上这句就不会保存了。
问题又来了,然后使用了这一句,那么getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener();
就无法注册事件了,因为它不是SharedPreferences
所以我们需要重新注册了,那么就要在类中实现接口
implements OnPreferenceChangeListener
这样就会要求你实现虚拟函数
@Override
public boolean onPreferenceChange(Preference preference, Object objValue) {
return false;
}
这个函数默认返回是false, 写好后,让preference的每个子项注册一下就好了
setOnPreferenceChangeListener(this);
这样就注册好了。
然后我在开发的过程中发现,preference修改值的时候不会生效,我们继续看api发现,原来是返回值的问题,
把onPreferenceChange的返回改为true就可以了。
因为false就表示不需要更新value.