Android onSharedPreferencesChanged在首选项活动首次启动时触发
我已为我的应用程序注册了onSharedPreferencesChanged侦听器。如果我第一次安装我的应用程序,SharedReferencesChanged监听器会被触发,但它不应该被触发 这是我的密码:Android onSharedPreferencesChanged在首选项活动首次启动时触发,android,Android,我已为我的应用程序注册了onSharedPreferencesChanged侦听器。如果我第一次安装我的应用程序,SharedReferencesChanged监听器会被触发,但它不应该被触发 这是我的密码: onSharedPrefChangedListener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onShared
onSharedPrefChangedListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(
SharedPreferences sharedPreferences, String key) {
// TODO Auto-generated method stub
if(key.equals(ENABLE_BANNER_AD_PREFERENCE_KEY)){
Toast.makeText(FragmentTabsPager.this,getString(R.string.will_disable_restart), Toast.LENGTH_SHORT).show();
}
}
};
sharedPreferences.registerOnSharedPreferenceChangeListener(onSharedPrefChangedListener);
这就是XML中的首选项:
<CheckBoxPreference android:title="@string/title"
android:summary="@string/summary"
android:icon="@drawable/icon"
android:defaultValue="true"
android:key="bannerKey"> </CheckBoxPreference>
当我在安装后第一次启动应用程序时,会出现Toast。如果我再次启动应用程序并导航到首选项,则不会触发preferencesListener
有人有办法解决这个问题吗?IMO系统所做的是正确的行为
但是您应该能够引入一个标志来区分第一次调用和后续调用。也许这是正确的行为。但我不明白为什么它只是在第一次发布之后才发布?。请尝试删除应用程序数据。preferences监听器会被调用吗?我认为问题在于android:defaultValue=“true”属性将在第一次启动时从preferences aktivity设置。。因此,当在首选项中未添加任何带有首选项键的内容时,将始终调用侦听器。。现在。。不知道如何解决此问题:)这意味着当没有应用程序数据时,首选项已更改(以前的状态可能是已删除或设备上没有应用程序)。非常符合逻辑。至于解决方案,您可以在共享首选项中引入一个布尔标志,比如“已启动”。当调用侦听器时,检查该标志是否存在。如果(该标志不存在或为false),{这是第一次启动;您将该标志设置为true而不执行任何操作}其他{这是后续启动;您想做什么就做什么}