Android Preference 默认值的问题和注册事件

时间:2022-03-23 17:38:42

        本人在开发的过程中使用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.