2012-10-26 44 views
0

我有一个非常奇怪的。我有两个应用程序,一个免费应用程序和一个付费应用程序,两者都使用基本相同的代码,但有些代码可以在免费应用程序中展示广告。Android注册OnSharedPreferenceChangeListener()不起作用

由于某些原因,registerOnSharedPreferenceChangeListener()不能在免费版本中运行。什么更奇怪......如果我在该代码行中放置一个断点,并运行调试器,则它会正常注册。没有那里的断点,它从不登记。任何想法会导致这种情况?也许在项目设置中有所不同?我一直在努力解决这一整天!

代码:

SharedPreferences.OnSharedPreferenceChangeListener prefsListener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
     @Override 
     public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
      if(key.equals(AUTORESPONSEGLOBAL)) 
      { 
       ARCheckBox.setChecked(settings.getBoolean(AUTORESPONSEGLOBAL, false)); 
       if(ARCheckBox.isChecked()) 
       { 
        //green 0xaarrggbb a=alpha 
        AR_label.setTextColor(0xff00ff00); 
       } 
       else 
       { 
        //red 
        AR_label.setTextColor(0xffff0000); 
       } 
      } 
      if(key.equals(CLOCK24)) 
      { 
       updateTime(); 
      } 
     } 
    }; 

    settings.registerOnSharedPreferenceChangeListener(prefsListener); 
+0

这真的很难回答,因为你没有太多的工作。你能解释一下这个代码的上下文(它存在于何处),谁在更新首选项以及何时?你用什么方法确定函数永远不会被调用?你有没有一个日志声明,或者你是否期望调用该函数的其他副作用? – Tim

+0

我在代码中运行了一个断点,并且它从来没有到达断点。当我在注册线上放置一个中断点时,它就进入了该方法。当用户点击复选框时,首选项将被更改。我已经浏览了logcat,并且里面没有任何东西。 – Randy

回答

2

OK,我仍然不知道为什么它是在一个项目上工作,而不是其他...但我固定它。

我在onCreate()中声明SharedPreferences.OnSharedPreferenceChangeListener prefsListener = new SharedPreferences.OnSharedPreferenceChangeListener() { ... };。我将它改为它自己的独立方法,现在看起来工作正常。我改变了这两个项目以保持一致。

+0

原因是您不能使用匿名内部类作为侦听器。我也遇到过这个问题。 请参阅:http://stackoverflow.com/questions/2542938/sharedpreferences-onsharedpreferencechangelistener-not-being-called-consistently – donnadulcinea