我有一个非常奇怪的。我有两个应用程序,一个免费应用程序和一个付费应用程序,两者都使用基本相同的代码,但有些代码可以在免费应用程序中展示广告。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);
这真的很难回答,因为你没有太多的工作。你能解释一下这个代码的上下文(它存在于何处),谁在更新首选项以及何时?你用什么方法确定函数永远不会被调用?你有没有一个日志声明,或者你是否期望调用该函数的其他副作用? – Tim
我在代码中运行了一个断点,并且它从来没有到达断点。当我在注册线上放置一个中断点时,它就进入了该方法。当用户点击复选框时,首选项将被更改。我已经浏览了logcat,并且里面没有任何东西。 – Randy